Glob列出文件,file_exists()表示它们不存在

时间:2012-08-06 19:27:22

标签: php

我有一个与file_exists()glob()相关的奇怪问题。后者列出了这个特定目录中的所有文件没有问题,但如果我遍历文件路径并在它们上面调用file_exists(),则返回false。

我的第一反应是这是权限问题,但我已经跑了

sudo chmod -R 766 ./directoryName

这样PHP至少可以读取访问权限。仍然没有区别。

我在这里读到了其他一些提到安全模式可能存在问题的问题,但我已经确认我的PHP(PHP Version 5.3.5-1ubuntu7.10)没有以安全模式运行。

这是我在相关目录中的ls -la输出...

drwxrw-rw-  6 user     user      4096 2012-08-04 16:15 .
drwxr-xr-x  6 user     user      4096 2012-08-04 12:42 ..
-rwxrw-rw-  1 user     user       141 2012-07-25 20:43 AppCache.php
-rwxrw-rw-  1 user     user      1982 2012-08-04 10:54 AppKernel.php
-rwxrw-rw-  1 user     user       474 2012-07-25 20:43 autoload.php
-rwxrw-rw-  1 www-data user     47590 2012-08-06 20:01 bootstrap.php.cache
drwxrwxrw-+ 3 user     user      4096 2012-08-06 20:24 cache
-rwxrw-rw-  1 user     user      1643 2012-08-06 20:01 check.php
drwxrw-rw-  2 user     user      4096 2012-08-04 12:41 config
-rwxrw-rw-  1 user     user       794 2012-07-25 20:43 console
-rwxrw-rw-  1 user     user        13 2012-07-25 20:43 .htaccess
drwxrwxrw-+ 2 user     user      4096 2012-08-06 20:25 logs
-rwxrw-rw-  1 user     user      1327 2012-07-25 20:43 phpunit.xml.dist
drwxrw-rw-  3 user     user      4096 2012-08-04 12:41 Resources
-rwxrw-rw-  1 user     user     24240 2012-08-06 20:01 SymfonyRequirements.php
-rwxrw-rw-  1 user     user       727 2012-07-25 20:43 upgrade.php

在我的索引脚本中,我正在做以下作为一个非常基本的测试...

$files = glob('/path/to/directory/*.cache');
foreach($files as $file) {
    echo $file . ':';
    var_dump(file_exists($file));
    echo '<br>';
}

输出以下内容......

/path/to/directory/bootstrap.php.cache:
boolean false

如果我创建一个脚本并从命令行运行它,file_exists()调用将按预期返回true

2 个答案:

答案 0 :(得分:3)

IIRC,如果没有+x权限位,您将无法读入目录,这可能是问题的根源。

将权限掩码更改为755而不是766应该赋予PHP读取和执行权限,这应该可以解决问题。

sudo chmod -R 755 ./directoryName

答案 1 :(得分:1)

嗯,你的权限看起来很多,但我觉得这是因为所有者是“用户”。

要进行测试,请尝试将权限更改为php用户的名称,您可以通过以下方式找到:

echo whoami();

然后检查你的index.php

如果是这种情况,您可以为您的文件创建一个包含'user'和php用户的组(通常是我所理解的'daemon')

喝彩!