我有几个关于 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
),目录 / home / virtual / domain.com
(没有尾随斜杠,因此包括子目录)被包含/启用在 open_basedir
中,并且 is_dir
试图迭代的文件都位于该文件夹的子文件夹下。那么它们为什么不在允许的路径内呢?显然它们在!奇怪的是,这个错误只会在
is_dir
返回 false,即文件不是一个文件夹而是一个普通文件时出现。似乎它可以在不抛出错误的情况下迭代目录。之前已经有类似的问题在这里发布过:Open_basedir restriction oddness (没有找到解决方案)。
有人有什么想法吗?
(注意:更改PHP设置不是选项,因为这是共享主机,我没有任何管理员访问权限)
&
(和号)和_
(下划线)。但是,即使这些路径不包含任何特殊字符(除非大写字母算作特殊字符),错误也会出现。而特殊字符都在目录名中(并且在这些情况下正确解析和迭代,其中is_dir
评估为TRUE
),从未出现在文件名中(这就是错误发生的地方)。 - Janus Bahs Jacquet