PHP:open_basedir允许路径

Jan*_*uet 5 php open-basedir

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
Run Code Online (Sandbox Code Playgroud)

这让我很困惑.

显然,根据错误消息(以及php_info同样),/home/virtual/domain.com包含/启用了目录(没有尾部斜杠,因此包括子目录)open_basedir,并且is_dir尝试迭代的文件都位于该文件夹下的子文件夹中.那么为什么它们不在允许的路径内呢?显然他们是!

奇怪的是,此错误似乎仅在is_dir返回false 时显示,即,当文件不是文件夹而是常规文件时.它似乎可以直接遍历目录而不会抛出错误.

此前发布的类似问题:Open_basedir限制奇数(未找到解决方案).

有人有主意吗?

(注意:更改PHP设置不是一个选项,因为这是一个共享主机,我没有任何管理员权限)

小智 4

PHP 中存在未修复的错误,当您打开或检查以现有文件作为前缀、不存在部分作为后缀的路径时,会触发该错误。在您的示例中,存在/home/virtual/domain.com/public_html/galleries/img/002.JPG后缀不存在的部分/部分(路径中的尾部斜杠)。

\n\n

有解释说这不是一个错误:\xe2\x80\x9c这是预期的行为。不存在的非路径(带有斜杠的路径)被视为在 basedir.\xe2\x80\x9d 之外,但我不这么认为。仅当路径的第一部分是现有文件时才会触发此错误。

\n\n

PHP 错误:

\n\n\n