【问题标题】:PHP is_readable fails but opendir worksPHP is_readable 失败但 opendir 工作
【发布时间】:2012-06-07 21:09:47
【问题描述】:

基本上是锡上写的:

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\MOVIES 是一个目录

\\HTPC\MOVIES 打开

哪个奇怪?我可以遍历目录中的文件,但显然它不可读。没关系,就像我说的我仍然可以读取文件,但是我觉得有点奇怪。

有人有什么想法吗?

【问题讨论】:

  • “HTPC”机器上的操作系统是什么?是窗户吗?
  • 我不确定,但可能是因为 Windows 文件系统(FAT 或 NTFS)您可能有“列出内容”的权限,但不允许“读取”!
  • 你在做什么? IIS?
  • 只是在另一台计算机上运行 xamp,我想这一定是某种权限问题,因为同一台计算机上不同驱动器上的另一个目录对所有 3 项检查都返回 true:/
  • 即使认为stackoverflow.com/questions/1153824/… 指的是似乎对您有用的opendir,该讨论中提出的答案也可能会解决您的问题。

标签: php


【解决方案1】:

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

感谢你们的帮助。

【讨论】:

  • 有趣。 is_readable() 只是 stat 的一个薄包装,所以这绝对是一些权限问题;看到这些信息如此具有误导性,我仍然感到惊讶:)
【解决方案2】:

如果您想阻止进入目录,请检查您的安全策略,寻找绕过遍历检查或类似的东西。

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

如果您的 ACL 已为整棵树仔细正确地设置和选择,那么您通常不需要触摸它。

【讨论】:

  • 这种事情不会适用于所有驱动器,而不仅仅是一个驱动器吗?
  • 这是安全策略功能,一次适用于整个系统。它在全局范围内启用或禁用,它不提供或带走真正的安全性。如果您的 ACL 已为整棵树仔细正确地设置和选择,那么您通常不需要触摸它。
猜你喜欢
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多