PHP 致命错误 打开所需文件失败

2022-08-30 09:21:34

我从Apache收到以下错误

[2011年3月19日,星期六,23:10:50][warn] mod_fcgid: stderr: PHP 致命错误: require_once() [function.require]: 打开失败需要 '/common/configs/config_templates.inc.php' (include_path='.:/usr/share/pear:/usr/share/php') in /home/viapics1/public_html/common/configs/config.inc.php 第 158 行

我绝对不是Apache的专家,但文件config.inc.php和config_templates.inc.php就在那里。我还尝试导航到测试.html我放置在common/configs/中的页面,因此我认为没有权限问题。我还在config_templates.inc.php上设置了权限,以授予每个人读取、写入和执行权限。不知道在这一点上该怎么办,我检查了是否有/usr/share/php目录,我发现没有,但是当我做了yum安装php时,它说它有最新的。想法?


答案 1

这实际上并不是一个与Apache相关的问题。甚至没有与PHP相关的。要了解此错误,您必须将虚拟服务器上的路径与文件系统中的路径区分开来。

require运算符处理文件。但像这样的道路

                          /common/configs/config_templates.inc.php

仅存在于虚拟 HTTP 服务器上,而文件系统中没有此类路径。正确的文件系统路径将是

/home/viapics1/public_html/common/configs/config_templates.inc.php

哪里

/home/viapics1/public_html

部分称为文档根,它将虚拟世界与真实世界连接起来。幸运的是,Web服务器通常具有与PHP共享的配置变量中的文档根。因此,如果您将代码更改为类似如下的内容

require_once $_SERVER['DOCUMENT_ROOT'].'/common/configs/config_templates.inc.php';

它将从放置在任何目录中的任何文件工作!

更新:最终我写了一篇文章,解释了文件系统和Web服务器上相对路径和绝对路径之间的区别,详细解释了这个问题,并包含一些实用的解决方案。例如,当您从命令行运行脚本时,不存在这样一个方便的变量。在这种情况下,一种称为“单个入口点”的技术是可以挽救的。您也可以参考上面的文章了解详细信息。


答案 2

如果您正在运行 SELinux,则可能必须授予 httpd 权限才能使用以下命令从 /home dir 读取:

 sudo setsebool httpd_read_user_content=1

推荐