PHP:open_basedir 允许的路径

标签 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

这让我很困惑。

显然,根据错误消息(以及 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/

相关文章:

php - 范围字符串为整数

php - 转发POST数据

php - PMA 4.5.2.0 file_exists() : open_basedir restriction in effect

PHP 目录错误 - open_basedir 限制生效

php - 升级到 5.4 但 "php -v"仍然返回旧版本

php - 反向面包屑问题

php - 为什么两个 select 查询不能在一个 php 代码中执行?

php - 检查open_basedir限制是否生效

php - 为什么在 IIS 上使用 open_basedir 和 PHP 作为 FastCGI?