我正在创建一个文件上传器,它会检查目录中是否存在文件。如果它确实存在,我必须为文件想出一个新名称(即文件.txt-> file1.txt)。不知道为什么,但它不断产生错误。这是我的代码。希望这不是显而易见的事情。
$directory = "files/";
$name = $_FILES['filename']['name'];
$valid_name = true;
$counter = 0;
if(file_exists($directory . $_FILES['filename']['name'])) {
$valid_name = false;
}
while(!$valid_name){
$name = $_FILES['filename']['name'] . $counter;
if(file_exists($directory . $name)){
counter++;
}
}
你的代码是错误的。这更简单,更容易理解。
$directory = "files/";
$counter = 0;
$name = $_FILES['filename']['name'];
while(file_exists($directory . $name)){
$counter++;
$name = $_FILES['filename']['name'] . $counter;
}
此外,您的代码不会生成file.txt -> file1.txt
但file.txt -> file.txt1
此代码也是如此。要正确生成它,请使用扩展名和名称。
您忘记更改 $valid_name
的值。无论如何,一种更简单的方法就是:
$directory = "files/";
$counter = "";
while (file_exists($directory . $_FILES['filename']['name'] . $counter)) {
$counter++;
}
// Here the name is: $directory . $_FILES['filename']['name'] . $counter
考虑一下,在第一次执行$counter++
后,它变成"1",然后变成 2,依此类推......
一个较小的代码,只是为了好玩:
$c = "";
while (file_exists("files/".$_FILES['filename']['name'].$c)) $c++;
// Here the name is: "files/".$_FILES['filename']['name'].$c
使用变量时忘记正确命名变量:
$counter++;
// not counter++ but $counter++;
代码有许多问题,我将列出这些问题,然后进行清理。
- 语法错误:计数器未以 $ 符号为前缀
- 样式:您的代码格式不正确,因此您将更难识别问题。
- 逻辑流程:您只检查是否存在单个文件名,而不检查其他文件名。
- 您没有处理文件扩展名。
尝试这样的事情:
$directory = "files/";
$path = pathinfo( $directory . $_FILES['filename']['name'] );
$name = $path['filename'];
$counter = 0;
while ( file_exists( $path['dirname'] . $path['basename'] ) ) {
$counter++;
$path['filename'] = $name . $counter;
}
$outputFile = $path['dirname'] . $path['filename'] . '.' . $path['extension'];