1. 程式人生 > >php程式設計中require和include多層巢狀導致檔案找不到的錯誤

php程式設計中require和include多層巢狀導致檔案找不到的錯誤

php中include和require可以包含其他檔案

但常引入的是一個相對路徑

如此會產生一個檔案,如下:

例如: (網站根目錄) ├資料夾A │ │ │ └1.php ├資料夾B │ │ │ └2.php └index.php
當在1.php中通過include(“../B/2.php”)來引入B目錄下的2.php檔案; 在index.php中通過include(“A/1.php”)來引入A目錄下的1.php檔案; 執行出來當然會出現問題,找不到../B/2.php檔案。 報錯: Warning:  failed to open stream: No such file or directory in 檔案路徑 on line 3

錯誤原因是: php被編譯到index.php中執行,也就是相當於1.php同index.php一樣位於網站根目錄下,但是在1.php別忘記了一段程式碼include(“../B/2.php”); “../”意味著什麼?上一級目錄,現在1.php已經在根目錄下了,這時候再上一級,那就已經找不到2.php了,所以問題就出現在此。
很多人會想到include(“/B/2.php”),這樣不就好了,同樣不行php不同於我們的jsp,在include中使用”/”並不是我們所想象的網站根目錄,它代表的的 當前的目錄,因此還是不行。
解決方法: 不能用相對路徑,能就用絕對路徑 大家知道dirname(__FILE__);可以獲取專案的根目錄 所以我們可以從根目錄下引用我們想要的檔案
比如: 在index.php中引用A目錄下的1.php:include(dirname(__FILE__)."/A/1.php");
如此,不管在哪級檔案中,都不用擔心找不到檔案了