我正在尝试为将要上载到我的服务器的图像创建缩略图。请参阅https://www.codeigniter.com/userguide3/libraries/image_lib.html#processing-an-image。创建后,我希望将缩略图保存到另一个文件夹,因为原始图像和缩略图将保存在同一位置。
所以,我尝试使用move_uploaded_file()
函数,但它无法移动文件。我不确定我的代码是否正确。检查一下。
Belwo是我的代码:
if($_FILES['file_name']['size'] != 0){
$config['upload_path'] = FCPATH.MEDIA_LIB_URI.'facts';
$config['allowed_types'] = 'jpg|jpeg|png|gif';
$config['max_size'] = 0;
$newFileName = removeExt($_FILES['file_name']['name']).'-'.uniqueId(); // renaming the file name without the ext
$new_name = $newFileName.getExt($_FILES['file_name']['name']); // new file name with the ext
$config['file_name'] = $new_name;
$this->load->library('upload',$config);
$this->upload->initialize($config);
if($this->upload->do_upload('file_name')){
$uploadData = $this->upload->data();
$file_name = $uploadData['file_name'];
$this->load->library('image_lib');
$configer = array(
'image_library' => 'gd2',
'source_image' => $uploadData['full_path'],
'create_thumb' => TRUE,
'maintain_ratio' => TRUE,
'width' => 950,
'height' => 950,
);
$this->image_lib->clear();
$this->image_lib->initialize($configer);
$this->image_lib->resize();
$thumbName = $newFileName.'_thumb'.getExt($_FILES['file_name']['name']); // getting the exact thumbnail name that been created by codeigniter
move_uploaded_file($thumbName, FCPATH.MEDIA_LIB_URI.'facts/thumbnail/'.$new_name);
return $file_name;
} else {
return $this->upload->display_errors();
}
}
2条答案
按热度按时间n3schb8v1#
希望这对您有所帮助:
使用
$configer
中的new_image
更改文件夹路径:$config['new_image'] = '/path/to/new_image.jpg';
注意:如果只指定了新映像名称,则它将与原始映像放在同一文件夹中
如果只指定了路径,则新图像将以与原始图像相同的名称放置在目标中。
如果同时指定了路径和映像名称,则会将其放置在自己的目标中并为其指定新名称。
更多信息请访问:https://www.codeigniter.com/user_guide/libraries/image_lib.html#CI_Image_lib::resize
holgip5t2#
您使用重命名或复制找到了正确的解决方案。
它不能与move_uploaded_file一起使用的原因是,此函数只移动$_FILES数组中临时名称为“tmp_name”的上载文件。
PHP手册中解释了出现此行为的原因:“此函数检查以确保filename指定的文件是有效的上载文件(意味着它是通过PHP的HTTPPOST上传机制上传的)。如果文件是有效的,它将被移动到目的地指定的文件名中。如果对上传文件所做的任何操作可能会向用户泄露其内容,这种检查就特别重要。甚至是同一系统上的其他用户。
按照PHP手册中的POST方法上传:
$_FILES ['userfile']['name'] =客户端计算机上文件的原始名称。$_FILES ['userfile']['tmp_name']=服务器上存储上载文件的临时文件名。
结束引号
“tmp_name”是服务器生成的唯一密钥,因此文件系统中不会出现文件名重复。
在代码中,生成的$thumbnail字符串与$_FILES数组中的“tmp_name”不匹配。
您没有收到错误消息的原因是,同样来自PHP手册,但这次是针对move_uploaded_file:如果filename不是有效的上载文件,则不会发生任何操作,并且move_uploaded_file()将返回FALSE。
因此,如果您在代码中捕获move_uploaded_file的结果,如$moveResult = move_uploaded_file(...您将以$moveResult === false结束。检查此类操作的结果以便在出错时做出React总是一个好主意。