引用檔案是將另乙個原始檔的全部內容包含到當前原始檔匯中進行使用,引用外部檔案可以減少**的重複編寫。php提供了include語句、require語句、include_once語句及require_once語句實現引用檔案。
include\include_once
include()語句將引用指定檔案中的所有文字,並把文字複製到該語句所在的檔案中。這些包含的檔案中的php**就好像是主文件的一部分一樣來執行。語法格式:
boolinclude (string $filename); //如果檔案已被包含,則返回true
當乙個檔案被包含時,其中所包含的**繼承了include所在行的變數範圍。這意味著從該處開始,呼叫檔案在該行處可用的任何變數在被呼叫的檔案中也都可用,而且所有在包含檔案中定義的函式和類都具有全域性作用域。
另一種匯入檔案方法是使用include_once()函式。include_once()函式會在匯入檔案前檢測該檔案是否在該頁面的其他部分被匯入過,如果有的話,就不會重複匯入該檔案,例如,要匯入的檔案中存在一些自定義函式,那麼如果在同乙個程式中重複匯入這個檔案在第二次匯入時便會發生錯誤,因為php不允許相同名稱的函式被重複宣告。
php中的被包含檔案可以像函式一樣返回乙個值,只需要在被包含檔案的末尾使用return語句來結束**的執行。
$var=include(string $filename);
require\require_once
引用檔案requlre語句的使用方法與include語句類似,都是實現對外部檔案的引用。在php檔案被執行之前,php解析器會用被引用的檔案的全部內容替換require語句,然後與require語句之外的其他語句組成新的php檔案,最後再按新php檔案執行程式**。因為require語句相當於將另乙個原始檔的內容完全複製到本檔案中,所以一般將其放在原始檔的起始位置,用於引用需要使用的公共函式檔案和公共類檔案等。php可以使用任何副檔名來命名引用檔案,但php通常用來解析副檔名被定義為.php的檔案。引用語法:
voidrequire(string filename); //filename指定完整路徑檔名
在實際程式設計中會遇到乙個頁面呼叫多個頁面的情況,可能出現巢狀呼叫,重複呼叫,所以就要用到require_once避免重複呼叫引起的錯誤。在應用require_once語句時會先檢查要引用檔案是不是在程式中的其他地方已被引用過,如果有,則不會再次重複呼叫該檔案。
總結一下,require語句來呼叫檔案和include語句是類似的,但存在如下區別。
使用require語句呼叫檔案時,如果呼叫的檔案沒找到,require語句會輸出錯誤資訊,並且立即終止指令碼的處理。而include語句在沒有找到檔案時則會輸出警告,不會終止指令碼的處理。
使用require語句呼叫檔案時,在php指令碼被執行之前,php解析器將用外部檔案替換require語句,然後與其他語句組成新的php檔案並執行該新的程式;而通過include語句呼叫外部檔案時,只有程式執行到該語句時,才會呼叫外部檔案。
include_once和require_once語句確保乙個被包含檔案只包含一次,使用這個語句可以防止意外多次包含相同的函式庫,從而導致函式和類的重複定義及變數重新賦值而產生錯誤。但include_once語句在指令碼執行期間呼叫外部檔案發生錯誤時,產生乙個警告,而require_once語句則導致乙個致命錯誤。
不同目錄下檔案相互引用
當多個php檔案存在相互引用關係時,保險的做法是寫上檔案的全路徑,這樣可以在任意目錄下啟動主程式所在檔案。但這種使用這種引用方式不利於文件遷移和部署。
因此我們通常使用相對路徑進行引用。
相對路徑
相對路徑檔案引用即在檔案路徑中使用『.』、『..』、『/』,其中. 表示當前目錄; ..表示上級目錄; /表示目錄分隔符。如果檔名以」./」或者」../」做字首,則表示當前檔案所在目錄或父目錄。如
[root@localhostphp]# tree
├──a.php
└──b
├──b.php
[root@localhost php]# cat b/b.php
include_once("../a.php");
$filepath=dirname(__file__);
echo
"b file is in: ".$filepath."\n";
我們分別在b目錄和其上級目錄下執行b.php,如
[root@localhost b]# php b.php
a fileis in: /test/php
b fileis in: /test/php/b
[root@localhost php]# php b/b.php
phpwarning: include_once(../a.php): failedto open stream: no such file or directory in /test/php/b/b.php on line 2
phpwarning: include_once(): failed opening'../a.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php') in/test/php/b/b.php on line 2
b fileis in: /test/php/b
[root@localhostphp]#
這是為什麼呢?這是因為在相對路徑使用時,其他一些web程式語言中相對路徑都是以當前處理檔案(本例為b.php)所在目錄為基準,而在php中並非如此,php中相對路徑是以當前工作目錄(php直譯器執行所在目錄)為基準的,並非以當前處理檔案所在的目錄為基準。所以,在b目錄下執行b.php,php直譯器會去php目錄下尋找a.php檔案,這是可以找到的。當在php目錄下執行b.php,php直譯器會去test目錄下尋找a.php檔案,這當然是找不到的。
解決這一問題,有兩種方法,
在包含語句中使用dirname(__file__),如
[root@localhostb]# vi b.php
include_once(dirname(__file__)."/../a.php");
$filepath=dirname(__file__);
echo"b file is in: ".$filepath."\n";
使用dirname(__file__)獲取當前檔案所在的目錄,然後根據這個目錄,向前或者向後定位。dirname(__file__)."/../a.php"就等價於/test/php/b/../a.php,即/test/php/a.php。
[root@localhostb]# cd /test/php/b/../
[root@localhostphp]#
驗證一下
[root@localhostphp]# php b/b.php
a fileis in: /test/php
b fileis in: /test/php/b
使用chdir(__file__)
這個語句可以把當前檔案所在的目錄設定為當前工作目錄,尤其是交叉引用的時候非常有用。格式
chdir(dirname(__file__));
set_include_path
以上都是使用include()函式或require()函式來引用檔案,我們也可以修改php.ini配置檔案達到同樣的目的,設定include_path的作用就是針對include和require的路徑範圍進行限定。
[root@localhostetc]# cat php.ini | grep include_path
;include_path= ".:/php/includes" ;linux平台下的路徑配置
;include_path= ".;c:\php\includes" ;windows下路徑配置
;php's default setting for include_path is ".;/path/to/php/pear"
[root@localhostetc]#
設定了include_path後,要包函檔案就比較簡便了,不用寫一大串的路徑,當很多需要包函的檔案都在乙個目錄下時,這樣會覺得比較方便。如include(『/test/php/a.php』)和include(『a.php』)是等價的,只不過後者需要在配置檔案中將include_path設定為」/test/php」。
除了在配置檔案中修改路徑外,我們可以動態地修改這個路徑,使用set_include_path函式在指令碼裡動態地對php.ini中include_path修改。
如,[root@localhostb]# vi b.php
//include_once(dirname(__file__)."/../a.php");
set_include_path(get_include_path().path_separator.dirname(__file__)."/../"); //設定include_path
$include_value= ini_get('include_path'); //獲取當前inclue_path值
echo$include_value."\n";
include('aa.php');
$filepath=dirname(__file__);
echo"b file is in: ".$filepath."\n";
get_include_path()是獲取當前include_path的預設值。path_separator 是個常量,是include_path的路徑分界符合,window上是;,在unix和linux上是:。
[root@localhostb]# php b.php
.:/usr/share/pear:/usr/share/php:/test/php/b/../
a fileis in: /test/php
b fileis in: /test/php/b
當指定的 include_path含有多個目錄時 ,而所要求包含的檔案在這幾個目錄都有相同名稱的檔案存在時,php選擇使用設定 include_path 時排位居前的目錄下的檔案。
PHP 引用檔案
伺服器端引用 ssi 用於建立可在多個頁面重複使用的函式 頁首 頁尾或元素。通過 include 或 require 函式,您可以在伺服器執行 php 檔案之前在該檔案中插入乙個檔案的內容。除了它們處理錯誤的方式不同之外,這兩個函式在其他方面都是相同的。include 函式會生成乙個警告 但是指令碼...
PHP 引用檔案
本文簡記 php 引用檔案的方式。require 和 include 語句是語言結構,不是真正的函式,可以像 php 中其他的語言結構一樣,例如 echo 可以使用 echo ab 形式,也可以使用 echo abc 形式輸出字串 abc。require 和 include 語句也可以不加圓括號而直...
php引用其他目錄的php檔案
1.目錄conf下有個config.php配置檔案 1 2return array 3 tmpl l delim 5 db type mysql 資料庫型別 6 db host localhost 伺服器位址 7 db name mss 資料庫名 8 db user root 使用者名稱9 db p...