我收到来自Apache的以下错误
**[2011年3月19日星期六23:10:50] [警告] mod_fcgid:stderr:PHP致命错误:require_once()[函数.require]:无法打开第158行上的/home/viapics 1/public/html/common/configs/config. inc. php中所需的“/配置文件”(包含路径=“。:/usr/share/pear:/usr/share/php”)
我当然不是ApacheMaven,但是文件config.inc.php & config_templates.inc.php在那里。我也试着导航到我放在common/configs/中的test.html页面,所以我认为没有权限问题。我还设置了config_templates.inc.php上的权限,给予每个人读、写和执行权限。现在不知道该怎么做,我检查了一下是否有一个/usr/share/php目录,我发现没有,但是当我安装yum php时,它说它有最新的。
7条答案
按热度按时间h5qlskok1#
这实际上不是一个与Apache相关的问题,甚至也不是一个与PHP相关的问题。要理解这个错误,你必须区分 * 虚拟服务器 * 上的路径和 * 文件系统 * 中的路径。
require
运算符处理文件。但这样的路径只存在于虚拟HTTP服务器上,而文件系统中没有这样的路径。正确的文件系统路径应为
其中
一个叫做 * 文档根 * 的部分,它连接着虚拟世界和现实世界。幸运的是,Web服务器通常在一个配置变量中有文档根,它和PHP共享。所以如果你把你的代码修改成这样
更新:最后我写了一篇文章,解释了difference between relative and absolute paths在文件系统和Web服务器上的作用,详细解释了这个问题,并包含了一些实用的解决方案。当你从命令行运行你的脚本时,这样一个方便的变量是不存在的。2在这种情况下,一个叫做"单一入口点"的技术是拯救。3你也可以参考上面的文章来获得细节。
w46czmvw2#
如果您运行的是SELinux,则可能需要使用以下命令授予httpd从/home目录读取的权限:
zc0qhyus3#
运行
php -f /common/configs/config_templates.inc.php
以验证文件中PHP语法的有效性。4urapxun4#
您可以使用PHP常量
__DIR__
修复它它是文件的目录。如果在include中使用,则返回包含的文件的目录。这等效于dirname
__FILE__
。此目录名没有尾随斜杠,除非它是根目录。1brjng4g35#
为了防止这对其他人有帮助,我昨晚偶然发现了这个错误触发的一个模糊案例。具体地说,我使用了require_once方法,并且只指定了文件名而没有指定路径,因为所需的文件存在于同一目录中。
我开始在一个点上得到'失败打开所需的文件'错误。在撕裂了我的头发了一会儿,我终于注意到一个PHP警告消息紧挨着致命错误输出,表明'失败打开流:Permission denied“,但更重要的是,通知我它试图打开的文件的路径。然后我发现我在其他地方创建了该文件的副本(Apache无法访问其所有权),该副本碰巧也在PHP的”include“搜索路径中,并且位于我希望它被选中的文件夹之前。
qltillow6#
您可以在php.ini中设置包含路径
include_path = ".:/home/viapics1/public_html"
pkbketx97#
我有完全相同的问题,我三次检查了包含路径,我还检查了pear是否安装,一切看起来都很好,我仍然得到错误,经过几个小时的疯狂看这个我意识到,在我的脚本有这样的:
而不是:
是的,愚蠢的括号不见了,但是我的脚本的这一行没有生成错误,这让我很奇怪