Codeigniter Загрузка изображения не работает на реальном сервере
У меня есть ситуация, когда пользователь загружает свои фотографии путешествий. Они сохраняются в папке, а также должны быть в базе данных. Ситуация такова: мой код отлично работает на локальном хосте и многих других серверах, но не на сервере, который я хочу. Хотя он успешно загружает файлы, но запрос не выполняется, что должно сохранить путь к файлу в базе данных. Я застрял в этой проблеме больше недели. Тот же код работает в других местах. Вот мой контроллер:
public function trip_photos(){
$this->load->model('UserModel');
$this->load->model('CommentModel');
$this->load->library('session');
print_r($_FILES);
$logged_session = $this->session->userdata('login');
if($logged_session == 1) {
$this->load->model('TripModel');
$this->load->model('UserActivityModel');
$uid = $this->session->userdata('uid');
$tid = $this->input->post('tid');
foreach($_FILES as $key => $image_upload){
$upload = self::upload_trip_photo($key);
if($upload['status']){
$this->TripModel->add_trip_photo($uid, $tid, $upload['file']);
}
}
$this->UserctivityModel->add_user_photo($uid, $tid);
}else{
redirect('/');
}
}
private function upload_trip_photo($image){
$msg = '';
$config['upload_path'] = './assets/images/trip/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 2048;
$config['file_name'] = parent::getGUID();
$this->load->library('upload', $config);
if ($this->upload->do_upload($image))
{
$data = $this->upload->data();
$resize['image_library'] = 'gd2';
$resize['source_image'] = "./assets/images/trip/" . $data['file_name'];
$resize['create_thumb'] = TRUE;
$resize['maintain_ratio'] = TRUE;
$resize['width'] = 222;
$resize['thumb_marker'] = '';
$resize['new_image'] = "./assets/images/trip/thumbnails/" . $data['file_name'];
$this->image_lib->resize();
$this->image_lib->clear();
$this->image_lib->initialize($resize);
if($this->image_lib->resize()){
$status = true;
$msg = $data['file_name'];
}else{
$status = false;
}
}
else
{
$status = false;
}
@unlink($_FILES[$image]);
return array('status' => $status, 'file' => $msg);
}
когда я включил CI_Profiler, он говорит, что только 2 из 3 запросов выполняются на сервере, и я хочу, чтобы он работал. Но тот же профилировщик предполагает, что 3 из 3 запросов выполняются на локальном или других серверах. Это так запутанно. Обратите внимание, что я уже проверил следующее:
- Загрузка файла: вкл
- upload_raw_post_data: вкл
- Разрешения selinux: отключает (у меня есть centos)
- Разрешения на файл: 777
- php memory_limit: 128 МБ
- max_size: 8 МБ
- var_dump, print_r, echo - все не работает или отображает какую-либо информацию из контроллера. так или иначе, это в приведенном выше коде:
$upload = self::upload_trip_photo($key);
не возвращает ему требуемый путь к файлу. Кто-нибудь может помочь, пожалуйста? @DFriend
ОБНОВЛЕНО Оказывается, что на локальном хосте находятся другие серверы, на которых он работает, этот массив возвращается функцией upload_trip_photo в переменную $ upload:
Array ( [image0] => Array ( [name] => maintour3.jpg [type] => image/jpeg
[tmp_name] => D:\xampp\tmp\php2539.tmp [error] => 0 [size] => 200491 ) )
array(2) { ["status"]=> bool(true) ["file"]=> string(36)
"E3965DFC8B265CEFF522A1EC43B33E34.jpg" }
в то время как на сервере, где он не работает, возвращается только этот массив:
Array ( [image0] => Array ( [name] => mg7.jpg [type] => image/jpeg
[tmp_name] => /tmp/phpNcCnX0 [error] => 0 [size] => 28460 ) )
Это означает, что это утверждение в функции upload_trip_photo(): возвращаемый массив ('status' => $status, 'file' => $msg);
не возвращает запрошенный массив с именем и статусом файла. И почему? Я совершенно невежественен.
Помогите, пожалуйста!
1 ответ
К счастью, это сработало после обширной отладки. Линия
if($this->image_lib->resize()){
$status = true;
$msg = $data['file_name'];
}else{
$status = false;
}
не работал Позже, когда я установил его display_error()
Метод, он показал, что мой сервер не поддерживает библиотеку GD. Это важная библиотека для управления графикой. Таким образом, запрос не выполнялся, поскольку для переменной $status было установлено значение false.
Я перекомпилировал свой php с модулем библиотеки GD. И Биньо! теперь это работает. Спасибо, что остаетесь со мной.:)