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,如果他想删除所有匹配的文件(很可能是这种情况),他必须离开它。如果他只想删除第一个,他需要它。对不起,刚刚看到你的最后一句话:-)