【发布时间】:2012-07-21 03:15:03
【问题描述】:
我在一个页面上打了几个电话给is_dir。他们一直工作没有问题。
几天前,托管公司将 PHP 从 5.2 升级到 5.3。从那时起,我对is_dir 的所有调用都导致了以下错误(消息):
Warning: is_dir(): open_basedir restriction in effect.
File(/home/virtual/domain.com/public_html/galleries/img/002.JPG/)
is not within the allowed path(s):
(/home/virtual/domain.com:/home/virtual/_tmp)
in /home/virtual/domain.com/public_html/index.php on line 201
这让我很困惑。
显然,根据错误消息(以及php_info),open_basedir 中包含/启用了目录/home/virtual/domain.com(没有尾部斜杠,因此包括子目录)以及is_dir 中的文件试图迭代的都位于该文件夹下的子文件夹中。那么为什么它们不在允许的路径之内呢?显然他们是!
奇怪的是,此错误似乎仅在 is_dir 返回 false 时出现,即,当文件不是文件夹,而是常规文件时。它似乎可以遍历目录而不会抛出错误。
之前在此处发布过类似问题:Open_basedir restriction oddness(未找到解决方案)。
有人有什么想法吗?
(注意:更改 PHP 设置不是一个选项,因为这是一个共享主机,我没有任何管理员权限)
【问题讨论】:
-
这是实际的错误信息吗?还是某些路径中有某些特殊字符?
-
某些路径确实有一些特殊字符:
&(与号)和_(下划线)。但是即使对于那些不包含任何特殊字符的路径也会出现错误(除非大写字母算作特殊字符)。并且特殊字符都在目录名称中(并且在is_dir评估为TRUE的情况下被正确解析和迭代),从不在文件名中(这是发生错误的地方)。
标签: php open-basedir