PHP:如何检查文件是否存在或权限被拒绝?

时间:2012-03-10 20:09:54

标签: php permissions filesystems

我想检查文件是否不存在。当file_exists()函数返回false时,我无法确定该文件是否存在或我是否对该文件没有权限。

如何识别这两种可能性?

5 个答案:

答案 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