我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后缀不存在的部分/部分(路径中的尾部斜杠)。
有解释说这不是一个错误:\xe2\x80\x9c这是预期的行为。不存在的非路径(带有斜杠的路径)被视为在 basedir.\xe2\x80\x9d 之外,但我不这么认为。仅当路径的第一部分是现有文件时才会触发此错误。
\n\nPHP 错误:
\n\n| 归档时间: |
|
| 查看次数: |
4500 次 |
| 最近记录: |