【问题标题】:Warning, open_basedir restriction in effect caused by trailing path after php file警告,由 php 文件后的尾随路径引起的 open_basedir 限制生效
【发布时间】: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


【解决方案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

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

【讨论】:

  • 谢谢,第二张票看起来像中奖者。
  • 很高兴能帮上忙。可以根据您的需要使用 @ 符号来抑制错误吗? @file_exists ?
  • 是的,这就是我必须做的,直到错误得到解决。再次感谢
猜你喜欢
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-22
相关资源
最近更新 更多