"无法打开所需文件,PHP遭遇致命错误"
P粉345302753
P粉345302753 2023-08-20 17:22:12
0
2
467
<p>我从Apache得到以下错误:</p> <p><strong>[Sat Mar 19 23:10:50 2011] [warn] 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安装php时,它说已经是最新版本。有什么建议吗?</p>
P粉345302753
P粉345302753

全部回复(2)
P粉662802882

如果您正在运行SELinux,您可能需要授予httpd读取/home目录的权限,请使用以下命令:

sudo setsebool httpd_read_user_content=1
P粉251903163

这实际上不是一个与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服务器上的相对路径和绝对路径的区别,详细解释了这个问题,并包含了一些实际的解决方案。例如,当您从命令行运行脚本时,这样一个方便的变量是不存在的。在这种情况下,可以使用一种称为“单一入口”的技术来解决。您也可以参考上述文章了解更多细节。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!