【问题标题】:php won't include an existing file: permission deniedphp 不会包含现有文件:权限被拒绝
【发布时间】:2009-12-02 23:34:29
【问题描述】:

如果你读到最后你会笑的:) 这让我发疯了 - 无法让 php 包含具有适当权限设置等的现有文件。

我有 test.php 文件和“lib/tools.php”文件。

我运行以下代码:

$fn = 'C:\Sasha\ThreeDiamonds\www\lib\tools.php';
if(file_exists($fn)){
    echo "Trying to INCLUDE THE BLoody file: $fn";
if(require_once($fn)==false) echo("failed to include: ".$fn);
}

并获得以下信息:

尝试包含 BLoody 文件: C:\Sasha\ThreeDiamonds\www\lib\tools.php 警告: require_once(C:\Sasha\ThreeDiamonds\www): 无法打开流:权限 被拒绝 C:\Sasha\ThreeDiamonds\www\test.php 上 第 5 行致命错误:require_once(): 打开失败需要'' (include_path='.;C:\php5\pear') 在 C:\Sasha\ThreeDiamonds\www\test.php 上 第 5 行

现在,它正在运行 Windows/IIS 和最新版本的 php。

如果我从相同的 tools.php 目录调用另一个 php 文件,其中包含以下代码,则以下工作正常:

require('tools.php');
$mytools = new tools();
$mytools->ShowGallery();

这真让我抓狂:) IIS 设置为具有应用程序池身份的匿名身份验证 - 我可以看到 php-cgi.exe 在本地服务帐户下运行,并且我确实确保 tools.php 有效权限允许完全访问此帐户。

我为这个 tools.php 文件启用了安全审计以检查失败的尝试,它没有显示任何问题。

好的,我继续安装 ProcMon 来看看这里发生了什么。我得到的只是“查询打开”操作的“FAST IO DISALLOWED”。嗯? Windows7 是的。

我迷路了,请帮忙:)

【问题讨论】:

  • 会是require 还是require_once?我不确定它们到底返回了什么,但我可以想象如果文件已经包含,require_once 会返回 false
  • 不,同样的结果:$fn = 'C:\Sasha\ThreeDiamonds\www\lib\tools.php'; if(file_exists($fn)){ echo "试图包含血腥文件:$fn";需要($fn); }
  • 是的,删除了我的答案。查看错误消息显然没有意义。

标签: php windows permissions include


【解决方案1】:

查看警告引发的确切路径,它看起来仍然是 www 目录或以下目录(ThreeDiamonds)的权限问题

会不会是C:\Sasha\ThreeDiamonds 有权限问题,而下面的目录没有?这可以解释为什么它使用相对路径。

【讨论】:

  • 好吧,我已经检查了有效权限 - 只要这些权限很好,就会提供。事实上,这个问题与权限无关,我会更新我的答案来解释细节。
【解决方案2】:

没关系 - 解决了这个问题。

这个问题实际上与权限无关:工具类构造函数中有一个错误,这是造成这种情况的原因。为什么 php 会抛出此权限错误 - 这是另一个问题 :)

谢谢大家!

【讨论】:

  • 请回答您自己的问题,以便以后有类似问题的其他人受益。
  • 工具类构造函数中的未定义索引导致此问题。奇怪的是我得到了致命的权限错误而不是非致命的警告。
猜你喜欢
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 2012-01-11
  • 2011-07-29
  • 2012-07-27
  • 2013-08-07
  • 2018-03-19
  • 2015-07-15
相关资源
最近更新 更多