2016-09-12 47 views
0

我最近一直在学习在PHP中构建图像库上传器。我似乎无法解决在将文件上传到我的上传文件夹之前如何重命名我的文件。任何人都可以帮助我吗?PHP - 重命名并上传文件(如果存在的话)

继承人我到目前为止。

if(isset($_POST['submit'])) { 
$allowedExts = array("gif", "jpeg", "jpg", "png","GIF","JPEG","JPG","PNG"); 
$temp = explode(".", $_FILES["file"]["name"]); 
$extension = end($temp); 
if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/jpg") 
|| ($_FILES["file"]["type"] == "image/pjpeg") 
|| ($_FILES["file"]["type"] == "image/x-png") 
|| ($_FILES["file"]["type"] == "image/png")) 
&& in_array($extension, $allowedExts)) { 

    if ($_FILES["file"]["error"] > 0) { 
    echo "Invalid File Type"; 
    } else { 

    $target = "../upload/"; 
    $name = addslashes($_FILES['file']["name"]); 

    if(file_exists('../upload/' . $name)) { 
     $explode = explode('.', $name); 
     $img = $explode[0]; 
     $ex = $explode[1]; 
     $i = 1; 
     $new = $img . '_' . $i . '.' . $ex; 

     while (file_exists('../upload/' . $new)) { 
      $i++; 
      $new = $img . '_' . $i . '.' . $ex; 
     } 

     // RENAME FILE HERE? 

    } 
     move_uploaded_file($_FILES["file"]["tmp_name"], $target. $_FILES["file"]["name"]); 
} 

} else { 
    echo "Error uploading image"; 
    die(); 
} 

} 

所以,正确的我while循环之后就是我想要重命名的文件,然后使用move_uploaded_file()以功能将其移动到我的“上传”目录。什么是我能达到这个目标的最好方法?

感谢

回答

2

当你调用move_file_upload你可以简单地给新文件的名称作为第二个参数,我明白了文档不明确这一点,但它的工作原理。

move_uploaded_file($_FILES["file"]["tmp_name"], $target. $_FILES["file"]["name"]); 

所以,你会做这样的事情

move_uploaded_file($_FILES["file"]["tmp_name"], $target. $_FILES["file"]["name"] . "Some random string to be added to the filename"); 

或者,如果你想忽略前面的文件名一起刚刚从你的第二个参数中删除。

move_uploaded_file($_FILES["file"]["tmp_name"], $target. "new file name here"); 
+0

呃现在有道理!我会将其标记为答案。谢谢你的帮助! :) – ShiggyDooDah

+1

没问题,正如提到的文件重命名文件不是很清楚,但这就是它的实现方式 –

1

为什么不能同时做到这一点?

您可以在移动时对其进行重命名。只需提供新的文件名作为第二个参数move_uploaded_file()

move_uploaded_file($_FILES["file"]["tmp_name"], $target . $new);