被包含文件先按參數給出的路徑尋找,若是沒有給出目錄(只有文件名)時則按照 include_path 指定的目錄尋找。若是在 include_path 下沒找到該文件則 include 最後纔在調用腳本文件所在的目錄和當前工做目錄下尋找。若是最後仍未找到文件則 include 結構會發出一條警告;這一點和 require 不一樣,後者會發出一個致命錯誤。php
這是一個須要在php.ini中設置的值,通常狀況下咱們不會輕易設置它app
顧名思義就是當前php文件所在的目錄的路徑框架
這個值是容易混淆的,由於這個所謂的當前工做目錄路徑其實和文件是否被include有關係!這一點在框架中更容易被混淆、被忽略!函數
文件目錄結構以下:ui
- require -- app --- application.php --- db.php -- index.php -- db2.php
<?php /*只是包含了app目錄下的application.php文件*/ include "app/application.php";
<?php /*這裏包含的db.php文件和application.php文件同一個目錄*/ $config = include "db.php"; print_r($config); /*這裏包含的db2.php文件和index.php文件同目錄*/ $config2 = include "db2.php"; print_r($config2); echo "\n"; echo "\n__FILE__:"; print_r(__FILE__); echo "\n__DIR__:"; print_r(__DIR__); echo "\nWorking Dir:"; print_r(getcwd());
你猜運行index.php後的顯示的打印結果是什麼?code
你是否是認爲 $config2 = include "db2.php"; 會報錯?get
然而結果是這樣的io
Array ( [host] => 127.0.0.1 [username] => root [password] => root ) Array ( [host] => 127.0.0.1 [username] => root2 [password] => root2 ) __FILE__:E:\dongchao\projects\test\php\require\app\application.php __DIR__:E:\dongchao\projects\test\php\require\app Working Dir:E:\dongchao\projects\test\php\require
正如官網所述,include會嘗試在當前腳本所在目錄和當前工做目錄查找文件是否存在。db.php所在的目錄正是當前腳本所在目錄,而當前工做目錄則是index.php所在的目錄,若是把這個當作是一個框架的目錄結構,那麼當前工做目錄其實就是框架入口文件所在的目錄。test
getcwd函數能夠獲取到當前工做目錄路徑效率
爲了避免引發混淆,提升代碼可讀性,建議引入文件時使用絕對路徑! 使用絕對路徑還能夠避免include函數多餘的兩次查找(從當前腳本所在目錄和當前工做目錄進行查找),所以使用絕對路徑能提升執行效率!