include() 、require()語句包含並運行指定文件。這兩結構在包含文件上完全一樣,唯一的區別是對於錯誤的處理。require()語句在遇到包含文件不存在,或是出錯的時候,就停止即行,並報錯。include()則繼續即行。
例如下面的代碼: 代碼如下:include('hello.php'); echo 'include test final!';//include報錯,但是會繼續執行,顯示:include test final! require('hello.php'); echo 'require test final!';//require報錯,停止代碼的執行。 一句話總結: 1.include() 產生一個警告 2.require() 則導致一個致命錯誤 換句話說,如果你想在丟失文件時停止處理頁面,那就別猶豫了,用 require() 吧。include() 就不是這樣,腳本會繼續運行。同時也要確認設置了合適的include_path。 就是說再解析程序時即讀取require的文件,而不是解析後,如果不能讀取到被require的文件,就不能進行下一步動作。所以,不被正確包含就會導致程序的文件,用require比較好。可能效率上也略微高點。 注意:require() 無論如何都會包含文件,而include() 可以有選擇地包含: 代碼如下: <?php if(FALSE){ require('x.php'); } if(FALSE){ include('s.php'); } ?> 上面的代碼中:x.php 一定會被包含,而 s.php 一定不會被包含。 二種方式提供不同的使用彈性: require 的使用方法如 require("MyRequireFile.php"); 。這個函式通常放在 PHP 程式的最前面,PHP 程式在執行前,就會先讀入 require 所指定引入的檔案,使它變成 PHP 程式網頁的一部份。 include 使用方法如 include("MyIncludeFile.php"); 。這個函式一般是放在流程控制的處理區段中。PHP 程式網頁在讀到 include 的檔案時,才將它讀進來。這種方式,可以把程式執行時的流程簡單化。 一、使用語法和簡介 1、include() 語法:include(/path/to/filename) include()語句將在其被調用的位置處包含一個文件。包含一個文件與在該語句所在位置復制制定文件的數據具有相同內容的效果。 使用include()時可以忽略括號。 可以根據條件來執行include()語句。在條件語句中使用include()有個怪現象,它必須包圍在語句塊大括號中,或者用其他語句包圍符括起來。 2、include_once() 語法:include_once(filename) include_once() 語句在腳本執行期間包含並運行指定文件。此行為和 include() 語句類似,唯一區別是include_once()會先判斷一下這個文件在之前是否已經被包含過,如已經包含,則忽略本次包含。 include_once() 應該用於嵌套包含的情況下,想確保它只被包含一次以避免函數重定義,變量重新賦值等問題。 小結:include_once()函數的作用與include相同,不過它會首先驗證是否已經包含了該文件。如果已經包含,則不再執行include_once。否則,則必須包含該文件。除了這一點與include完全相同。 3、require() 語法:require(filename) require()在很大程度上與include相同,都是將一個模板文件包含到require調用坐在的位置。 require和include之間有兩點重要的區別。首先,無論require的位置如何,制定文件都將包含到出現require的腳本中。例如,即使require放在計算結果為假的if語句中,依然會包含指定文件。 第二個重要的區別是:require出錯時,腳本將停止運行,而在使用include的情況下,腳本將繼續執行。 4、require_once() 語法:require_once(filename) require_once() 語句在腳本執行期間包含並運行指定文件。此行為和 require() 語句類似,唯一區別是require_once()會先判斷一下這個文件在之前是否已經被包含過,如已經包含,則忽略本次包含。 require_once() 應該用於嵌套包含的情況下,想確保它只被包含一次以避免函數重定義,變量重新賦值等問題。 小結:隨著網站越來越大,可能會出現重復包含某些文件。這也許不是問題,但又是修改了所包含文件的變量後,卻由於後面再次包含原來的文件而被覆蓋,可能不希望出現這種情況。還可能出現另一個問題,即所包含文件中函數名的沖突。使用require_once就可以解決這些問題。 require_once函數確保文件只包含一次。在遇到require_once後,後面再試圖包含相同的文件時將被忽略。 二、區別總結 1、include()與require()語句區別。 兩者區別:這兩種結構除了在如何處理失敗之外完全一樣。 include() 產生一個警告,腳本會繼續運行。 require() 則導致一個致命錯誤,腳本會停止運行。 換句話說,如果想在遇到丟失文件或遇到錯誤時停止處理頁面就用 require()。如果想在遇到錯誤時繼續處理頁面就用 include()。 注意在 PHP 4.3.5 之前,包含文件中的語法錯誤不會導致程序停止,但從此版本之後會。 2、include_once()、require_once()與include()、require()的區別 include_once()和require_once()一樣,應該用於在腳本執行期間同一個文件有可能被包含超過一次的情況下,想確保它只被包含一次以避免函數重定義,變量重新賦值等問題。這就是include_once()和require_once()與include() 和require()的主要區別。 三、需要注意的問題 1.路徑問題 特別是嵌套包含的時候,一定得注意包含文件的路徑。 比如 A文件包含了B文件,B文件包含了C文件,A,B,C文件都不在同一個文件夾下,這個時候往往很容易出錯誤。 解決方案:可以使用 dirname(__FILE__) 語句,這句的意思是獲得當前腳本的絕對路徑。如:require_once(dirname(__FILE__).'/config.php'); 2.效率問題 include_once(),require_once(),與include(),require()比較,效率要低一些,因為他們至少得先判斷一下這個文件是否已包含。這一問題在PHP5版本有很大改進,不過效率還是有差別。