??摘要:在學習ThinkPHP源碼的時候,涉及到多個檔案嵌套包含的問題,這時檔案路徑應該怎麼確定?將在這裡記錄。
首先
??本文主要參考這篇文章。他講的很詳細,但是對於實用主義者來說,用不了那麼多東西,我來講的簡單一些。
寫在前面:我這裡的所有路徑(均是伺服器絕對路徑表示)說明如下:
- apache伺服器根目錄:?/home/pi/www/
- 專案檔根目錄:??? /home/pi/www/mvcTest/2Test/
- 項目入口檔案:???? /home/pi/www/mvcTest/2Test/index.php
- 要包含的下一個檔案:? /home/pi/www/mvcTest/2Test/Framework/Framework.php
- 再嵌套包含的檔案:?? /home/pi/www/mvcTest/2Test/Framework/Common/function.php
相對路徑
??相對路徑以 ./ 開始(還有 ../ 用的很少),意思是以當前檔案所在目錄作為參考目錄,但是這裡有個誤區,如果嵌套包含,就會出問題。
??問題在於PHP對於include require檔案的解釋是這樣的:
include (或 require)語句會擷取指定檔案中存在的所有文本/代碼/標記,並複製到使用 include 語句的檔案中。
??這就意味著,當index.php被調用的時候,下面兩個被引用的檔案內容,都被複製到了index.php一個檔案裡面。
所以:當嵌套的檔案裡面還需要include/require操作,使用相對路徑的話,那麼,參考的路徑其實是入口檔案所在的目錄,而不是當前檔案所在的目錄。
絕對路徑
??絕對路徑是使用伺服器(機器)檔案系統的絕對路徑,與apache伺服器的根目錄沒有關係。
??絕對路徑的使用比較簡單,不容易混淆出錯,下面提供一種技巧。
使用dirname(__FILE__);函數可以擷取當前檔案所在的絕對路徑,然後就可以不用管當前檔案的入口檔案在哪,使用擷取到的路徑,再拼接一下字串就OK了。
未確定路徑
??即路徑前面即不是 ./ 也不是 /
??這種東西不用去考慮了,使用上面兩種正規方法就夠了,不用管這個東西了。
<完>
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
').text(i)); }; $numbering.fadeIn(1700); }); });
以上就介紹了PHP require和include 路徑問題,包括了require方面的內容,希望對PHP教程有興趣的朋友有所協助。