我想检查文件是否不存在。当file_exists()
函数返回false
时,我无法确定该文件是否存在或我是否对该文件没有权限。
如何识别这两种可能性?
答案 0 :(得分:1)
也许is_readable
是你想要的?
答案 1 :(得分:1)
好吧,你可以先试试file_exists()。如果失败,您可以使用+ a标志尝试fopen()。如果失败,则表示您没有权限。
答案 2 :(得分:1)
我想检查文件是否不存在。当
file_exists()
函数返回false
时,我无法确定该文件是否存在或我是否对该文件没有权限。
不,你一定明白错了。如果文件存在,file_exists()
将返回TRUE
,如果不存在,则返回FALSE
。这与该文件的权限无关。
E.g。我的脚本无权阅读的文件会使file_exists
返回TRUE
因为它存在。
但是,如果我在该文件上使用is_readable
进行测试,则会返回FALSE
。我没有权限阅读该文件。
示例:
$file = 'unreadable';
var_dump(file_exists($file), is_readable($file));
输出:
bool(true)
bool(false)
编辑:当然,这与PHP利用的底层系统库绑定,以获取文件存在和文件权限的信息。如果不允许PHP获取有关文件是否存在的状态,它将告诉您该文件不存在。例如,如果您有一个存在的目录,但用户无法读取,那就是这种情况:
$dir = 'unreadable';
$file = $dir.'/unreadable.ext';
var_dump(file_exists($dir), is_readable($dir));
# bool(true)
# bool(false)
var_dump(file_exists($file), is_readable($file));
# bool(false)
# bool(false)
由于您希望获得$file
的存在状态,因此基础权限不允许您获取它。因此,该文件不存在。这同样正确,你应该更准确地了解你真正需要找到的东西。因为对你而言,该文件不存在。这就是目录权限的工作方式(这里所有的例子都是在Windows上运行的,但这些都是常见的,你可以在每个常见的文件系统实现中使用它。)
我希望能为你的问题提供一些启示。
答案 3 :(得分:1)
我编写了检查文件是否存在的函数。如果文件系统中没有这样的文件,则返回false,否则返回true。我的函数检查(自下而上)目录结构。人们应该相当确定$root
目录存在。
private function fileCanExists($root, $path) {
$root .= '/';
if (file_exists($root . $path))
return true;
while ($path != '.') {
$path = dirname($path);
if (file_exists($root . $path)) {
if (is_readable($root . $path))
return false;
else
return true;
}
}
return false;
}
这就是我写的时候的意思:
我想检查文件是否不存在。
答案 4 :(得分:0)
选中is_readable
,如果返回false,请查看file_exists