文件使用 PHP 写入错误的路径



我正在使用PHP将文件上传到文件夹中,但我的问题是它一次将文件写入2个不同的路径。我的代码如下。

if(array_key_exists('pimage',$_FILES)){
$tempFile = $_FILES['pimage']['tmp_name'];
$fileName = $_FILES['pimage']['name'];
$fileName = str_replace(" ", "-", $_FILES['pimage']['name']);
$fig = rand(1, 999999);
$saveFile = $fig . '_' . $fileName;
$uploadOk = 1;
if (exif_imagetype($_FILES['pimage']['tmp_name']) ==  IMAGETYPE_GIF) {
$ext=pathinfo($saveFile, PATHINFO_FILENAME);
$saveFile=$ext.'.png';
$png = imagepng(imagecreatefromgif($_FILES['pimage']['tmp_name']), $saveFile);
}
if (exif_imagetype($_FILES['pimage']['tmp_name']) ==  IMAGETYPE_JPEG) {
$ext=pathinfo($saveFile, PATHINFO_FILENAME);
$saveFile=$ext.'.png';
$png = imagepng(imagecreatefromjpeg($_FILES['pimage']['tmp_name']), $saveFile);
}
if (strpos($fileName,'php') !== false) {
# code...
}else{
$targetPath = PT_USERS_IMAGES_UPLOAD;
$targetFile = $targetPath . $saveFile;
if (file_exists($targetFile)) {
$data=array("msg"=>'profile image already exists');
$uploadOk = 0;
}
if ($_FILES["pimage"]["size"] > 2000000 || $_FILES["pimage"]["size"] == 0) {
$uploadOk = 0;
$data=array("msg" => "profile image should not greater than 2 MB.");
}
//echo $uploadOk;exit;
if ($uploadOk==0) {
$flag=0;
$data[]=array("msg" => $data['msg']);
}else{
$moved =move_uploaded_file($tempFile, $targetFile);
if ($moved) {
$filename = $saveFile;
$data = array('ai_image' => $filename);
$this->db->where('accounts_id', $dataArr['user_id']);
$this->db->update('pt_operator_accounts', $data);
}else{
$flag=0;
$data[]=array("msg" => "Not uploaded because of error #".$_FILES["pimage"]["error"]);
}
// print_r($data);exit;
}
}
}

在这里,我需要将文件写入PT_USERS_IMAGES_UPLOAD路径中,但在上传到此路径之前,文件也会上传到项目的根路径中。在这里,我只需要在PT_USERS_IMAGES_UPLOAD路径中上传,而不是在项目的根路径中上传。

可能是因为这些行:

imagepng(imagecreatefromgif($_FILES['pimage']['tmp_name']), $saveFile);

如果您查看有关此 imagepng(( 的文档,它会将图像输出到浏览器(带有正确的标头(或在填写第二个参数时将文件保存到磁盘,在您的情况下,您使用了to参数 ($saveFile(。因此,一旦将其保存在那里,您就可以使用将其保存到正确位置的move_uploaded_file($tempFile, $targetFile);再次保存它。

如果您尝试将某些内容转换为PNG,则只需执行imagepng()行并删除move_uploaded_file()行即可。将$saveFile更改为T_USERS_IMAGES_UPLOAD,然后您应该只获得一个保存的文件。无论哪种方式,请删除将文件保存到磁盘的方法之一。

相关内容

最新更新