【发布时间】:2014-04-17 10:50:24
【问题描述】:
首先让我说我知道这个问题很多。不过,没有什么能真正解决我的问题。
脚本小子正在通过点击
之类的 url 来寻找管理路径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 我会尽快在新版本中尝试它
【问题讨论】:
-
你的问题是?
-
为什么会抛出警告?
-
realpath('index.php').'/'- 值是多少? -
在这种情况下,它会找到您正在执行的文件的完整路径
标签: php warnings open-basedir