2012-06-03 55 views
5

基本上它在锡说:PHP is_readable失败,但执行opendir工作

if(is_dir($dir)) 
    echo $dir . " is a directory\n"; 

if(is_readable($dir)) 
    echo $dir . " is readable\n"; 

if($this->handle = opendir($dir)) 
    echo $dir . " opened\n"; 

返回:

\\ HTPC \电影是一个目录

\\ HTPC \ MOVIES打开

哪个更奇怪?我可以迭代目录中的文件,但显然它不可读。就像我说的我仍然可以阅读这些文件并不重要,但是我觉得它有点奇怪。

有没有人有任何想法?

+0

“HTPC”机器上的操作系统是什么?它是Windows吗? –

+0

是的,Windows 7! –

+0

我不确定,但也许是因为Windows文件系统(FAT或NTFS)您可能有权限“列出内容”,但“阅读”是不允许的! –

回答

3

看来这是一个权限错误。分配给该特定文件夹的是家庭组。家庭组实际上并未在网络上使用。删除家庭组并重新添加用户组is_readable返回true。仍然奇怪opendir如何返回true,但is_readable不是。你一定会期望一些不可读的东西在打开时失败。

感谢您的帮助球员。

+0

有趣。 ''is_readable()''只是'stat'的一个简单包装,所以肯定是一些权限问题;仍然惊讶地发现这些信息可能会让人误解) –

0

如果你想防止进入目录,寻找旁路遍历检查或类似的东西,请检查你的安全策略。

如果绕过检查,则可以进入acl's禁止的目录,但是无法读取内容。

如果你的ACL的设置和选择仔细和正确的整棵树,那么你通常不需要碰这个。

+0

这种事情不适用于所有驱动器,而不仅仅是一个? –

+0

这是安全性 策略功能并且适用于整个系统。它在全球启用或禁用,它不提供或带走真正的安全。如果你的ACL被设置并仔细选择了整棵树,那么你通常不需要触摸它。 –