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

Php 这是检查文件是否存在的正确方法吗?,php,glob,file-exists,unlink,Php,Glob,File Exists,Unlink,我正在尝试检查文件(图像)是否存在,以便在上载新文件之前将其删除。这就是我迄今为止所尝试的: foreach (glob("../imgs/" . $name . ".*") as $file) { if (file_exists($file)) { unlink($file); } } 这是正确的做法吗?如果找到匹配项,是否需要中断循环?如果文件夹中有很多图片,这会不会很糟糕 编辑:对不起,我应该提一下:上传文件时会使用用户唯一id重命名,这就是为什么如果用户

我正在尝试检查文件(图像)是否存在,以便在上载新文件之前将其删除。这就是我迄今为止所尝试的:

foreach (glob("../imgs/" . $name . ".*") as $file) {
    if (file_exists($file)) {
        unlink($file);
    }
}
这是正确的做法吗?如果找到匹配项,是否需要中断循环?如果文件夹中有很多图片,这会不会很糟糕


编辑:对不起,我应该提一下:上传文件时会使用用户唯一id重命名,这就是为什么如果用户想上传另一个图像,我想用现有图像替换它。(此图像用于配置文件图片)。

如果要中断循环,请在
取消链接()后添加
中断语句
,函数如下:

foreach (glob("../imgs/" . $name . ".*") as $file) {
    if (file_exists($file)) {
        unlink($file);
        break;
    }
}
如果要检查PHP文件是否仅存在:

您可以使用
文件\u exist()
函数。如果文件存在,此函数返回
TRUE
,否则返回
FALSE

$filename = './file_name.txt';

if(file_exists($filename)){
 echo sprintf('file %s exists',$filename);
}else{
 echo sprintf('file %s does not exist',$filename);
}
$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);
}
$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);
}
如果要检查PHP文件是否存在且可读:

您可以使用
is\u readable()
函数。如果文件存在且可读,则函数返回
TRUE
,否则返回
FALSE

$filename = './file_name.txt';

if(file_exists($filename)){
 echo sprintf('file %s exists',$filename);
}else{
 echo sprintf('file %s does not exist',$filename);
}
$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);
}
$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);
}
如果要检查PHP文件是否存在并可写:

您可以使用
is\u writable()
函数。如果文件存在且可写,则函数返回
TRUE
,否则返回
FALSE

$filename = './file_name.txt';

if(file_exists($filename)){
 echo sprintf('file %s exists',$filename);
}else{
 echo sprintf('file %s does not exist',$filename);
}
$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);
}
$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);
}

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

正如古弗兰在评论中已经提到的,在取消链接后放一个中断符,这样循环就不会继续搜索。
只需这样做,如果您不打算查找多个文件(即test.gif、test.png),那么您必须将其删除。

请在unlink()函数后中断语句。虽然您是对的,但Magnus似乎想检查任何文件扩展名,你不能用的是文件。@ManuelMannhardt-很显然他们应该知道文件的扩展名,不知怎么的?如果你使用glob,你不需要知道扩展名,因为OP已经在他的代码中,他正在搜索具有给定名称和任何扩展名的文件。Glob返回一个数组,其中包含所有匹配的文件。@ManuelMannhardt True,但我的观点是,在这段代码中,只有一个文件具有该名称,而不管其扩展名是什么(因为它总是在上载一个文件之前删除所有文件)。请记住,如果存在具有该名称的目录,则file_exists也会返回True。所以我会使用is_file而不是file_exists:)谢谢,这个file_exists()函数检查文件是否与脚本文件存在于同一个文件夹中。是的,但由于您事先不知道$filename包含什么,我会采取安全的方法,检查它是否确实是一个文件。是的,确切地说是@ManuelMannhardtExcactly。这现在取决于OP,如果他想删除所有匹配的文件(很可能是这种情况),他必须离开它。如果他只想删除第一个,他需要它。对不起,刚刚看到你的最后一句话:-)