PHP 致命錯誤無法開啟所需文件
P粉470645222
2023-08-23 19:46:43
<p>我從 Apache 收到以下錯誤</p>
<p><strong>[2011 年3 月19 日星期六23:10:50] [警告] 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 install php 時,它說它有最新的。有想法嗎? </p>
如果您正在執行 SELinux,您可能必須授予 httpd 權限才能從 /home 目錄讀取資料:
這其實不是一個與 Apache 相關的問題。甚至沒有 PHP 相關的。 要理解此錯誤,您必須區分虛擬伺服器上的路徑和檔案系統中的路徑。
require
運算子適用於檔案。但這樣的路徑僅存在於虛擬HTTP伺服器上,而檔案系統中不存在該路徑。正確的檔案系統路徑是
哪裡
部分稱為文件根,它將虛擬世界與現實世界連結起來。幸運的是,Web 伺服器通常將文件根放在與 PHP 共用的設定變數中。因此,如果您將程式碼變更為這樣的內容
它可以在任何目錄中的任何檔案中運行!
更新:最終我寫了一篇文章,解釋了文件中的相對路徑和絕對路徑之間的差異系統和網絡伺服器上,詳細解釋了問題,並包含一些實用的解決方案。就像,當您從命令列運行腳本時,這樣一個方便的變數並不存在。在這種情況下,一種稱為「單一入口點」的技術可以解決這個問題。詳細內容您也可以參考上面的文章。