Php 上传后向文件添加后缀

Php 上传后向文件添加后缀,php,file-upload,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

我正在上传文件,我想添加一点功能-如果您上传的文件名称已经存在,请添加后缀(数字),例如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);
}
}
$fileTmpLoc=$\u文件[“文件”][“tmp\u名称”];
$fileName=$_文件[“文件”][“名称”];
$upload\U dir=$\U服务器['DOCUMENT\u ROOT']。“/projektOpole/upload/”;

对于($i=1;$i),在文件名末尾添加后缀将使其位于文件扩展名之后。 下面将把你的后缀放在点之前。我将重写它以处理带有多个点的文件

$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;

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

$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);
试试下面的代码

 $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;
如果目录是可写的,则设置标志

  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);
       }
     }
   }
if(可写($upload\u dir)){
$is_writable=1;
}
如果($是可写的){

对于($i=1;$i,一个文件不能移动100次。可以复制,但不能移动;)对,我现在看到了,thnx:)不幸的是,结果是一样的-它第一次将文件保存在upload文件夹中,在另一次上载尝试后,我只能看到一个文件,没有任何扩展名。不,在上载的文件夹中不可能有相同的文件名。它现在根本不上载。此行:$filenameWithoutExt=substr($fileName,0,(strlen($extension)+1);给我一个语法错误(意外的“;”),有什么问题吗?抱歉-它现在确实上载了文件,但仍然-只有一次,没有新文件名的新文件。将行替换为thi$filenameWithoutExt=substr($fileName,0,(strlen($extension)+1));更新了代码。及其工作情况。请检查:)我已经检查了它和它的工作,复制整个代码再次运行。