1

我有一个与file_exists()and相关的奇怪问题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会按预期返回。

4

2 回答 2

3

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

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

sudo chmod -R 755 ./directoryName
于 2012-08-06T19:34:57.687 回答
1

嗯,你的权限看起来很允许,但我有一种感觉,因为所有者是“用户”。

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

echo whoami();

然后检查你的 index.php

如果是这种情况,您可以为您的文件创建一个组,该组同时具有“用户”和 php 用户(根据我的理解通常是“守护进程”)

干杯!

于 2012-08-06T19:34:10.593 回答