我在页面上对 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 设置不是一个选项,因为这是一个共享主机,我没有任何管理员访问权限)
最佳答案
PHP 中有一个未修复的错误,当您打开或检查一个以存在的文件作为前缀,而不存在的部分作为后缀的路径时,会触发该错误。在您的示例中,存在部分 /home/virtual/domain.com/public_html/galleries/img/002.JPG
不存在后缀 /
(路径中的尾部斜线) .
有解释说这不是错误:“这是预期的行为。不存在的非路径(带斜杠的路径)被认为在 basedir 之外。”,但我不这么认为。此错误仅在路径的第一部分是现有文件时触发。
PHP 错误:
关于PHP:open_basedir 允许的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11603156/