我遇到了用户上传他/她的旅行照片的情况。它们被保存在文件夹中,并且也应该在数据库中。情况是:我的代码可以在localhost和许多其他服务器上正常运行,但是不能在我想要的服务器上运行。尽管它成功上传了文件,但是不执行查询,这应该将文件路径保存在数据库中。一个多星期以来,我一直陷于这个问题。相同的代码可在其他地方使用。这是我的控制器:

    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时,它说我希望它在服务器上执行的查询中只有3个查询中有2个。但是同一分析器建议在本地主机或其他服务器上执行3个查询中的3个。它是如此混乱。
请注意,我已经检查了以下内容:


文件上传:开
upload_raw_post_data:开启
selinux权限:禁用(我是centos)
档案权限:777
php memory_limit:128 MB
max_size:8 MB
var_dump,print_r,回显全部无效或显示来自控制器的任何信息。
不知何故,以上代码中的内容:$upload = self::upload_trip_photo($key);没有将其返回给它所需的文件路径。有人可以帮忙吗? @DFriend


UPDATED结果表明,在本地主机中,还有其他服务器在工作,该数组由函数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()函数中该语句:
    return array('status'=> $ status,'file'=> $ msg);

不返回具有文件名和状态的请求的数组。又为什么呢?我完全一无所知。

请帮助!

最佳答案

值得庆幸的是,经过大量调试后,此方法仍然有效。线

if($this->image_lib->resize()){
        $status = true;
        $msg = $data['file_name'];
    }else{
        $status = false;
    }


没有工作。稍后,当我将其设置为display_error()方法时,它表明我的服务器不支持GD库。这是操作图形的基本库。因此,由于$ status变量设置为false,因此未执行查询。

我用GD Library模块重新编译了我的php。还有比格诺!它现在正在工作。
谢谢你陪我:)

08-04 17:19