我正在上传文件,我想添加一些功能 - 如果您上传的文件名称已经存在,请添加后缀(数字),以便您拥有例如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的新手,所以请尽量保持简单。
答案 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);