include_path 下尋找,然後是當前運行腳本所在目錄相對的 include_path 下尋找。例如 include_path 是 . ,當前工作目錄是 /www/ ,腳本中要 include 一個 include/a.php教程 並且在該文件中有一句 include "b.php" ,則尋找 b.php 的順序先是 /www/ ,然後是 /www/include/ 。如果文件名以 ./ 或者 ../ 開始,則只在當前工作目錄相對的 include_path 下尋找。
所以如下所示的文件結構
----a.php
----include/b.php
----include/c.php
其中a.php
<?php
include 'include/b.php';
?>
-----------------------
b.php
<?php
include 'c.php';
include 'include/c.php';
?>
--------------------------
c.php
<?php
echo 'c.php';
?>
--------------------------
都能正確運行,說明b.php中兩種不同包含路徑都是可行的,根據include尋找包含文件的方式都能找到c.php。
但是最好的方式還是使用絕對路徑,如果使用了絕對路徑,php內核就直接通過路徑去載入文件而不用去include path逐個搜索文件,增加了代碼執行效率
<?php
define('root_path',dirname(__file__));
include root_path.'/c.php';
?>
結論:
顯然include 後面路徑的格式和php的include path 對程序性能都是存在影響的,include 性能從慢到快的排序是
include 'a.php' < include './a.php' < include '/fullpath/a.php
在代碼中,使用絕對路徑include文件是最好的選擇,因為這樣php內核就直接通過路徑去載入文件而不用去include path逐個搜索文件。
所以我們最好在項目的公用文件中定義一個項目根目錄絕對路徑的常量,然後所有的include的路徑前都帶上這個常量,這樣項目中所有的include使用的都是絕對路徑,既提高程序性能,也減少了相對路徑帶來的煩惱。
參考代碼(來自emlog):
define('emlog_root', dirname(__file__));
include emlog_root . '/config.php';
如果你的項目中已經大量使用include 'test.php' 這樣格式的相對路徑且不好大量修改,那麼請盡量減少php include path中的路徑以提高一定的include性能。因為include path中的路徑越少,php搜索文件的時間也越少。