上传后添加后缀到文件

时间:2014-07-22 10:00:51

标签: php file-upload

我正在上传文件,我想添加一些功能 - 如果您上传的文件名称已经存在,请添加后缀(数字),以便您拥有例如file,file1,file2等。

我在这里已经阅读了一些解决方案,这是我到目前为止所得到的:

$fileTmpLoc =  $_FILES["file"]["tmp_name"];
$fileName = $_FILES["file"]["name"];

$upload_dir = $_SERVER['DOCUMENT_ROOT'] . "/projektOpole/upload/";

for ($i = 1; $i <= 100; $i++) {

if (file_exists($upload_dir) && is_writable($upload_dir) && file_exists($upload_dir.$fileName)) {
$moveResult = move_uploaded_file($fileTmpLoc, $upload_dir.$fileName.$i);
}
}

不幸的是它不起作用。

有人可以告诉我我的代码有什么问题吗?我是PHP的新手,所以请尽量保持简单。

3 个答案:

答案 0 :(得分:1)

请尝试以下代码。

 $fileTmpLoc =  $_FILES["file"]["tmp_name"];
 $fileName = $_FILES["file"]["name"];

获取文件扩展名

 $extension = end(explode('.', $fileName));

没有扩展名的文件名

  $filenameWithoutExt = substr($fileName, 0, -(strlen($extension)+1));

   $upload_dir = $_SERVER['DOCUMENT_ROOT'] . "/projektOpole/upload/";

   $is_writable = 0;
如果dir是可写的,

设置标志

  if(is_writable($upload_dir)){
     $is_writable = 1;
  }
  if($is_writable){
    for ($i = 1; $i <= 100; $i++) {
       if (file_exists($upload_dir.$fileName)) {
          $moveResult = copy($upload_dir.$fileName, $upload_dir.$filenameWithoutExt.$i.".".$extension);
       }else{
           $moveResult = move_uploaded_file($fileTmpLoc, $upload_dir.$fileName);
       }
     }
   }

答案 1 :(得分:0)

将后缀添加到文件名的末尾将把它放在文件扩展名之后。 以下将把你的后缀放在点之前。我将重写它以处理具有多个点的文件。

$suffixed = explode('.', $fileName);
$moveResult = move_uploaded_file($fileTmpLoc, $upload_dir.$suffixed[0].$i.'.'.$suffixed[1]);

以下解决方案适用于具有多个点的文件。

$moo  = explode('.', $fileName);
$ext  = array_pop($moo);
$fil  = implode('', $moo);
$moo  = $upload_dir . $fil . $i . '.' . $ext;

答案 2 :(得分:0)

尝试以下代码,它适用于所有类型的文件类型

$fileTmpLoc =  $_FILES["file"]["tmp_name"];
$fileName = $_FILES["file"]["name"];

$file_name=pathinfo($fileName,PATHINFO_FILENAME);           
$file_type=pathinfo($fileName,PATHINFO_EXTENSION);

$rand=rand(0,9999);                 
$filename=$file_name.$rand.".".$file_type;          
$upload_dir = $_SERVER['DOCUMENT_ROOT'] . "/projektOpole/upload/";                  
move_uploaded_file($fileTmpLoc, upload_dir.$fileName);