我有一个与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
。
答案 0 :(得分:3)
IIRC,如果没有+x
权限位,您将无法读入目录,这可能是问题的根源。
将权限掩码更改为755
而不是766
应该赋予PHP读取和执行权限,这应该可以解决问题。
sudo chmod -R 755 ./directoryName
答案 1 :(得分:1)
嗯,你的权限看起来很多,但我觉得这是因为所有者是“用户”。
要进行测试,请尝试将权限更改为php用户的名称,您可以通过以下方式找到:
echo whoami();
然后检查你的index.php
如果是这种情况,您可以为您的文件创建一个包含'user'和php用户的组(通常是我所理解的'daemon')
喝彩!