PHP 检查目录中是否存在文件


PHP Checking if a file exists in a directory

我正在创建一个文件上传器,它会检查目录中是否存在文件。如果它确实存在,我必须为文件想出一个新名称(即文件.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.txtfile.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++;

代码有许多问题,我将列出这些问题,然后进行清理。

  1. 语法错误:计数器未以 $ 符号为前缀
  2. 样式:您的代码格式不正确,因此您将更难识别问题。
  3. 逻辑流程:您只检查是否存在单个文件名,而不检查其他文件名。
  4. 您没有处理文件扩展名。

尝试这样的事情:

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