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 запросов выполняются на локальном или других серверах. Это так запутанно. Обратите внимание, что я уже проверил следующее:

  1. Загрузка файла: вкл
  2. upload_raw_post_data: вкл
  3. Разрешения selinux: отключает (у меня есть centos)
  4. Разрешения на файл: 777
  5. php memory_limit: 128 МБ
  6. max_size: 8 МБ
  7. 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. И Биньо! теперь это работает. Спасибо, что остаетесь со мной.:)

Другие вопросы по тегам