首先我想说,我知道这个问题很多。但是,没有什么能真正解决我的问题。
脚本小子正在通过点击像
这样的网址来寻找管理路径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我将很快在新版本中尝试
答案 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
结论是它似乎是一个错误。