【问题标题】:PHP is_dir always returns falsePHP is_dir 总是返回 false
【发布时间】:2014-08-26 12:48:27
【问题描述】:

我正在尝试使用 is_dir 函数,但即使目录确实存在,它也总是返回 false。 我是一个非常新的 Linux 用户(xubuntu),我在这里读到类似的问题,问题可能是目录权限。我试过使用:

sudo chmod -R folder_path

但它仍然无法正常工作。 我该如何解决? 谢谢。

编辑: 我忘了提到我正在使用codeigniter。我尝试在 2 个单独的文件上使用 file_exists(就像 is_dir 在我的 codeigniter 项目中不起作用),并且它起作用了。问题可能是因为我使用的是codeigniter吗?

【问题讨论】:

  • 试试sudo chmod 777 /folder path -R
  • 您可能没有正确指定路径。如果您使用readdir,一个常见的错误是在调用is_dir 之类的函数之前忘记将文件名与目录连接起来。显示您的代码。
  • 我敢打赌您的问题与此重复:stackoverflow.com/questions/8370237/…
  • 请显示文件夹的所有者名称

标签: php linux sudo chmod


【解决方案1】:

你忘记了权限,使用:

sudo chmod -R 775 folder_path

还要记住 is_dir() 函数缓存结果,来自文档:

Note: The results of this function are cached. See clearstatcache() for more details.

也许这是你的问题?

或者尝试使用绝对路径而不是相对路径。

【讨论】:

  • 不,请不要使用 777。这使得 所有用户 都可以写入它,并且存在安全风险。如果它需要可写,则需要它可以被 Web 服务器用户写入,在 Ubuntu (debian) 系统上是www-data。更合适和更安全的操作是使目录将其作为其组并成为组可写775chown :www-data folder_path
  • 为什么它需要是可写的? is_dir() 不会尝试更改任何内容。
  • @Barmar 确实如此。要检查的是该目录上方的整个树是否可由 Web 服务器用户可执行,因此它可以向下遍历到该目录。
  • 虽然可能缺少执行权限,但这种情况非常罕见。我敢打赌他的 PHP 代码有问题。
  • 我尝试使用 sudo chmod -R 775 folder_path,但它也不起作用。
【解决方案2】:

我发现了问题所在。是 .htaccess 导致了问题,因为它是拒绝所有的,所以导致了我遇到的问题。我将其更改为“全部允许”,现在效果很好。 很抱歉没有更好地解释自己,但问题已解决,非常感谢您的帮助。

【讨论】:

  • .htaccess 是造成问题的原因吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 2012-08-23
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多