PHP 致命错误无法打开所需文件
P粉470645222
P粉470645222 2023-08-23 19:46:43
0
2
519
<p>我从 Apache 收到以下错误</p> <p><strong>[2011 年 3 月 19 日星期六 23:10:50] [警告] mod_fcgid: stderr: PHP 致命错误: require_once() [function.require]: 无法打开所需的 '/common/configs/config_templates.inc。 php' (include_path='.:/usr/share/pear:/usr/share/php') 位于 /home/viapics1/public_html/common/configs/config.inc.php 第 158 行</strong></p> <p>我绝对不是 Apache 专家,但文件 config.inc.php 和 config_templates.inc.php 在那里。我还尝试导航到放置在 common/configs/ 中的 test.html 页面,因此我认为没有发生任何权限问题。我还在 config_templates.inc.php 上设置了权限,为每个人提供读取、写入和执行权限。不知道此时该怎么做,我检查是否有 /usr/share/php 目录,发现没有,但是当我执行 yum install php 时,它说它有最新的。有想法吗? </p>
P粉470645222
P粉470645222

全部回复(2)
P粉683665106

如果您正在运行 SELinux,您可能必须授予 httpd 权限才能从 /home 目录读取数据:

sudo setsebool httpd_read_user_content=1
P粉727531237

这实际上不是一个与 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';

它可以在任何目录中的任何文件中运行!

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板