我的情况是用户上传他/她的旅行照片。它们保存在一个文件夹中,也应该存在于数据库中。情况是:我的代码在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个我希望它能够正常工作。但是同一个分析器建议在localhost或其他服务器上执行3个查询中的3个。它如此令人困惑。 请注意,我已经检查了以下内容:
$upload = self::upload_trip_photo($key);
没有给它回复它所需的文件路径。有人可以帮忙吗? @DFriend UPDATED 原来在localhost中是其工作的其他服务器,这个数组由函数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);
没有返回请求的数组,文件名和状态。为什么?我完全无能为力。
请帮助!
答案 0 :(得分:1)
值得庆幸的是,经过大量调试后,这项工这条线
if($this->image_lib->resize()){
$status = true;
$msg = $data['file_name'];
}else{
$status = false;
}
无效。后来当我将它设置为display_error()
方法时,它显示我的服务器不支持GD库。这是操作Graphics的基本库。因此,查询未被执行,因为$ status变量设置为false。
我用GD Library模块重新编译了我的php。和bigno!它现在正在工作。 谢谢你和我在一起。 :)