"無法開啟所需文件,PHP遭遇致命錯誤"
P粉345302753
2023-08-20 17:22:12
<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>
如果您正在執行SELinux,您可能需要授予httpd讀取/home目錄的權限,請使用下列命令:
這其實不是一個與Apache相關的問題,甚至不是一個與PHP相關的問題。要理解這個錯誤,您必須區分虛擬伺服器上的路徑和檔案系統中的路徑。
require
運算子用於檔案。但是像這樣的路徑只存在於虛擬HTTP伺服器上,而在檔案系統中沒有這樣的路徑。正確的檔案系統路徑應該是
其中
部分被稱為文件根目錄,它將虛擬世界與真實世界連結。幸運的是,Web伺服器通常在一個設定變數中擁有文件根目錄,並與PHP共用。所以如果你將你的程式碼改成像這樣
它將在任何目錄中的任何文件中工作!
更新:最終我寫了一篇文章,解釋了檔案系統和Web伺服器上的相對路徑和絕對路徑的差異,詳細解釋了這個問題,並包含了一些實際的解決方案。例如,當您從命令列執行腳本時,這樣一個方便的變數是不存在的。在這種情況下,可以使用一種稱為“單一入口”的技術來解決。您也可以參考上述文章了解更多細節。