2011-03-19 98 views
37

我从阿帕奇收到以下错误PHP致命错误无法打开文件

[周六3月19日23时十分50秒2011] [提醒] mod_fcgid:标准错误:PHP的致命错误:require_once()函数/common/configs/config_templates.inc.php'(include_path ='。:/ usr/share/pear:/ usr/share/php')在/ home/viapi​​cs1/public_html/common/configs/config.inc.php on line 158

我绝对不是Apache的专家,但config.inc.php & config_templates.inc.php在那里。我也尝试导航到我放置在common/configs /中的test.html页面,所以我假设没有任何权利问题。我还在config_templates.inc.php上设置了权限,给予每个人读,写和执行权限。不知道在这一点上做什么,我检查了/ usr/share/php目录是否有,但我发现没有,但是当我安装php时它说它有最新的。想法?

+6

+1用于发布完整且准确的错误消息。每个人都应该这样做,但几乎没有人会这样做,而没有它就不可能回答这个问题。 – 2011-03-19 19:18:51

回答

66

这实际上并不是Apache相关的问题。甚至没有一个PHP相关的。 为了理解这个错误,你必须区分虚拟服务器路径和文件系统路径。

require运算符使用文件。但在服务器上没有

      /common/configs/config_templates.inc.php 

文件,而是

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

/home/viapics1/public_html部分被称为“文档根”,并将其与一个真实的连接虚拟世界。如果您将代码更改为类似

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

它可以从位于任何目录中的任何文件起作用。

+0

在.htaccess文件中更改我的代码? – 2011-03-19 19:16:09

+0

@Al Katawazi nope,在你的PHP代码中。您正在寻找PHP代码中的文件。而你必须使用RIGHT地址 – 2011-03-19 19:20:27

+0

对不起,这不是它。我更新了代码,如下所示:<?php require_once($ _ SERVER ['DOCUMENT_ROOT']。'/ common/configs/config.inc.php');而我仍然得到完全相同的错误。有趣的是,当我在网址中放置一个X时,它会返回如下所示的整个URL:无法打开需要的'/home/viapi​​cs1/public_htmlX/common/configs/config.inc.php',它的全部都很奇怪,能不能有一些全球覆盖正在进行?真奇怪的部分是这个应用程序正在另一台服务器上工作,但当移动到新的服务器时,我开始遇到这个问题。非常感谢迄今为止的帮助。 – 2011-03-19 20:07:12

3

运行php -f /common/configs/config_templates.inc.php验证文件中PHP语法的有效性。

+0

是什么原因? – 2011-03-19 19:19:39

+0

错误消息表明该文件不存在,那么RERUNNING php只是为了确认它不存在而有什么意义? OP有一个主要的斜线,把路径变成绝对的路线。它应该至少是一个没有前导斜杠的相对路径。 – 2011-03-19 19:43:48

+1

“错误消息表明该文件不存在。”不,它不。包含路径设置,文件权限设置或安全模式设置可能导致相同的错误消息。 (我也猜测它可能来自语法错误,这取决于错误报告设置,但经过一些测试后,PHP看起来总是显示实际的语法错误。) – 2011-03-19 19:58:55

-7

我有完全相同的问题,我三倍检查包含路径,我也检查梨安装,一切看起来不错,我仍然得到错误,经过几个小时的疯狂看着这个我意识到在我的脚本有这样的:

include_once "../Mail.php"; 

代替:

include_once ("../Mail.php"); 

没错,愚蠢的括号缺失,但对这一行我的脚本这是奇怪,我

没有产生错误
+4

因为include_once是一种语言结构,而不是一个“真正的”功能,括号是可选的。不知道为什么添加它们为你修复。 – 2013-02-08 18:07:14

7

如果你有SELinux的运行,则可能必须使用授予的httpd许可/主目录为:

sudo setsebool httpd_read_user_content=1 
0

嘿,我只是有这个问题,我发现我不是在文件夹位置密切关注足够:

require_once /vagrant/public/liberate/**APP**/vendor/autoload.php 

什么工作是:

require_once /vagrant/public/liberate/vendor/autoload.php 

很容易(作为初学者)忽略这个非常不明显的问题。是的,我意识到所记录的要求问题直接针对手头的问题,但如果您是初学者,就像我一样,这些事情可能很容易被忽略。

FIX:

在有(__ __迪尔“/etc/etc/etc/file.php”)的调试好好看看然后让你的文件系统在不同的窗口中打开,并映射两个直。如果甚至有丝毫的差别,这个要求将不起作用,并且上述错误将会被抛出。

0

为了以防万一这有助于其他人在那里,我偶然发现了一个不明确的案例,昨晚引发了这个错误。具体来说,我使用的是require_once方法,只指定了文件名和路径,因为所需的文件存在于同一目录中。

我开始在一个点上得到'失败的打开所需文件'错误。在将我的头发撕掉一段时间后,我终于注意到紧接在致命错误输出之上的一条PHP警告消息,表示'未能打开流:Permission denied',但更重要的是,通知我正在尝试的文件的路径打开。然后,我创建了一个文件副本(拥有Apache无法访问的所有权)的事实,其他地方也发生在PHP'include'搜索路径中,并在我希望它被拾取的文件夹之前。 D'哦!

相关问题