【发布时间】: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