2011-03-19 127 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'哦!

相關問題