Ich erhalte die folgende Fehlermeldung von Apache:
[Sa 19. März 23:10:50 2011] [warn] mod_fcgid: stderr: PHP fatal error: require_once() [function.require]: Opening '/common/configs/config_templates.inc. php' ist fehlgeschlagen (include_path='.:/usr/share/pear:/usr/share/php') in Zeile 158 von /home/viapics1/public_html/common/configs/config.inc.php ;/p>
Ich bin definitiv kein Experte für Apache, aber die Dateien config.inc.php und config_templates.inc.php sind beide vorhanden. Ich habe auch versucht, zur Seite test.html zu navigieren, die ich im Verzeichnis common/configs/ abgelegt habe, daher glaube ich nicht, dass ein Berechtigungsproblem vorliegt. Ich habe auch die Berechtigungen für die Datei config_templates.inc.php festgelegt, um jedem Lese-, Schreib- und Ausführungsberechtigungen zu erteilen. Ich bin mir nicht sicher, was ich tun soll. Ich habe nachgesehen, ob es ein Verzeichnis /usr/share/php gibt, und festgestellt, dass es keines gibt, aber als ich PHP mit yum installiert habe, hieß es, es sei bereits die neueste Version. Irgendwelche Vorschläge?
如果您正在运行SELinux,您可能需要授予httpd读取/home目录的权限,请使用以下命令:
这实际上不是一个与Apache相关的问题,甚至不是一个与PHP相关的问题。要理解这个错误,您必须区分虚拟服务器上的路径和文件系统中的路径。
require
操作符用于文件。但是像这样的路径只存在于虚拟HTTP服务器上,而在文件系统中没有这样的路径。正确的文件系统路径应该是
其中
部分被称为文档根目录,它将虚拟世界与真实世界连接起来。幸运的是,Web服务器通常在一个配置变量中拥有文档根目录,并与PHP共享。所以如果你将你的代码改成像这样
它将在任何目录中的任何文件中工作!
更新:最终我写了一篇文章,解释了文件系统和Web服务器上的相对路径和绝对路径的区别,详细解释了这个问题,并包含了一些实际的解决方案。例如,当您从命令行运行脚本时,这样一个方便的变量是不存在的。在这种情况下,可以使用一种称为“单一入口”的技术来解决。您也可以参考上述文章了解更多细节。