警告,open_basedir限制因php文件后的尾随路径而导致

时间:2014-03-12 23:38:24

标签: php warnings open-basedir

首先我想说,我知道这个问题很多。但是,没有什么能真正解决我的问题。

脚本小子正在通过点击像

这样的网址来寻找管理路径
mysite.com/index.php/admin/login

主文件正在截取他们的请求并查看他们是否要求提供真实文件。如果没有配置open_basedir这是正确的行为的服务器上没有警告,则会拒绝此操作。不幸的是,在我们使用open_basedir的服务器上,file_exists函数会抛出警告。

我已将其缩小为一个简单的例子。

将它放在index.php中并将路径更改为php文件所在的文件夹

<?php
ini_set('open_basedir', '/path/to/files');

var_dump(
    ini_get('open_basedir'), // make sure the config took hold
    file_exists(realpath('index.php').'/') 
);

现在您看到一个警告,例如

Warning: file_exists() [<a href='function.file-exists'>function.file-exists</a>]: open_basedir restriction in effect. File(/path/to/files/index.php/) is not within the allowed path(s): (/path/to/files) in /path/to/files/index.php on line

编辑:

应该注意的是,使用尾部斜杠请求不存在的文件不会导致警告。

var_dump('/path/to/files/bogus.php/');

将不会发出警告并返回false,这是预期的。

为了澄清我的问题,为什么会抛出警告,我可以避免它吗?

第二次编辑:

我正在运行php版本5.3.3-7 + squeeze17我将很快在新版本中尝试

1 个答案:

答案 0 :(得分:1)

这个确切的行为被报告为PHP 5.2.2 - 5.2.3中的错误:

https://bugs.php.net/bug.php?id=41518

然后报告在5.3.3.7 - 5.4.17中出现。

https://bugs.php.net/bug.php?id=53041

结论是它似乎是一个错误。