我有几个电话is_dir
在页面上。他们一直没有问题。PHP:open_basedir允许的路径
几天前,托管公司将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的设置是不是一种选择,因为这是一个共享的主机,我没有任何管理权限)
这是否是实际的错误消息?或者某些路径中的某些特殊字符? – SteAp 2012-07-22 19:36:52
有些路径确实有一些特殊字符:'&'(&符号)和'_'(下划线)。但即使对于不包含任何特殊字符的路径(除非大写字母被视为特殊字符),也会出现错误。并且特殊字符都在目录名称中(并且在'is_dir'评估为'TRUE'的情况下被正确解析和迭代),而不是在文件名称中(这是发生错误的地方)。 – 2012-07-22 21:45:34