这是检查文件是否存在的正确方法吗?

Is this the correct way of checking if a file exists?

我正在尝试检查文件(图像)是否存在,以便在上传新文件之前删除它。这是我到目前为止尝试过的:

foreach (glob("../imgs/" . $name . ".*") as $file) {
    if (file_exists($file)) {
        unlink($file);
    }
}

这是正确的做法吗?如果找到匹配项,我是否需要打破循环?如果该文件夹中有很多图片,这会不会很糟糕?

编辑:抱歉,我应该提一下:上传文件时会使用用户唯一 ID 重命名,这就是为什么如果用户想要上传另一张图片,我想将其替换为现有图片。 (此图片用于个人资料图片)。

如果你想打破循环在 unlink() 函数之后添加一个 break statement 作为:

foreach (glob("../imgs/" . $name . ".*") as $file) {
    if (file_exists($file)) {
        unlink($file);
        break;
    }
}

如果要检查 PHP 文件仅存在:

您可以使用file_exist()功能。此函数returns TRUE 如果文件存在,否则returns FALSE.

$filename = './file_name.txt';

if(file_exists($filename)){
 echo sprintf('file %s exists',$filename);
}else{
 echo sprintf('file %s does not exist',$filename);
}

如果要检查 PHP 文件是否存在且可读:

您可以使用is_readable()功能。函数 returns TRUE 如果文件存在且可读,否则 returns FALSE.

$filename = './file_name.txt';

if(is_readable($filename)){
 echo sprintf('file %s exists and readable',$filename);
}else{
 echo sprintf('file %s does not exist or is not readable',$filename);
}

如果要检查 PHP 文件是否存在且可写:

您可以使用is_writable()函数。函数 returns TRUE 如果文件存在且可写,否则 returns FALSE.

$filename = './file_name.txt';

if(is_writable($filename)){
 echo sprintf('file %s exists and writable',$filename);
}else{
 echo sprintf('file %s does not exist or is not writable',$filename);
}

是的,我觉得你的方法不错。它很可能比获取所有文件名并使用正则表达式检查名称更快。

正如 Gufran 在他的评论中提到的那样,在取消链接后放置一个中断,因此循环不会继续搜索。 仅执行此操作,如果您不打算查找该名称的多个文件(即 test.gif、test.png),则必须将其保留。