這篇文章主要介紹了關於PHP檔案載入和錯誤處理的介紹,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
知識點:
1-檔案載入
2-錯誤處理
檔案載入
檔案載入語句
1) 4個檔案載入語句:include, require, include_once, require_once
2) 使用形式相同。include “要載入的檔案完整路徑”; 或 include(“要載入的檔案完整路徑”);
如: include "d:/index.php";
3) 可以載入的檔案: php 或 html檔案
路徑
1) 相對路徑: 相對於當前網頁檔案所在的位置來定位某個被載入的檔案位置
./ : 表示當前位置,即當前網頁檔案所在的位置(目錄);
../ : 表示上一級位置,即當前網頁檔案所在的位置的上一級位置(目錄);
2)絕對路徑
本地絕對路徑; 如: include "d:/demo/index.php";
網路絕對路徑; 如: include "http://www.baidu.com/demo/index.php"
3) 不寫路徑,直接檔案名稱
實質是載入目前的目錄下的指定檔案名稱
如: include "index.php"; //PHP語言引擎會在當前網頁目錄下找該檔案
檔案載入執行過程
step 1: 從include|require 語句處退出PHP指令碼模式(進入html代碼模式)step 2:載入include|require 語句所設定的檔案中的代碼,並執行step 3:退出html模式重新進入php指令碼模式,繼續之後的代碼
include,include_once, require,require_once的區別
1) include 與 require 的區別, 或 include_once與require_once的區別
include或include_once 載入檔案失敗時(即沒有找到該檔案),報“提示錯誤“,然後繼續執行後續代碼;
require 或 require_once載入檔案失敗時,報錯並立即終止執行。
一般,require用於在程式中,後續的代碼依賴於載入的檔案的時候。
2) inlcude 與 include_once, 或require與require_once的區別
include 或 require載入的檔案不判斷是否重複,只要有include或 require語句,就會載入一次---即可能重複載入。
include_once或require_once載入的檔案會有內部判斷機制是否“前面代碼“已經載入過,如果載入過,就不再載入。
如: 如網頁中常見兩邊有相同的廣告,就是用include
被載入檔案中return的使用
1) include,require,include_once,require_once載入語句,如果載入成功返回1,載入失敗返回false
2) 如果被載入的檔案中有return, 則在該return後的該檔案內容不被載入 --終止載入
可以用於: 被載入檔案給載入檔案返回一個資料
錯誤處理
錯誤分類
1) 語法錯誤
如果文法有錯誤,就會立即報錯,並且不會去執行程式
2) 執行階段錯誤
在程式語法檢查通過後,開始運行程式,並在此過程中遇到的錯誤
常見3類錯誤: 提示性錯誤,警告性錯誤,致命錯誤
3) 邏輯錯誤
程式本身可以正常執行,沒有報錯。但並不是想要的結果。
錯誤分級
1) 技術層面的錯誤分級: PHP語言中,將各種錯誤進行了不同層級的分類歸納
每一層級的錯誤,都有一個“代號”,這個代號是系統內部的一個“常量”
2)系統常見錯誤
E_ERROR: 致命錯誤
E_WARNING: 警告性錯誤
E_NOTICE: 提示性錯誤
3) 使用者自訂錯誤
E_USER_ERROR: 自訂致命錯誤
E_USER_WARNING: 自訂警告性錯誤
E_USER_NOTICE: 自訂提示性錯誤
4) 其他
E_STRICT: 嚴謹性語法檢查錯誤
E_ALL: 代表所有錯誤
詳細參考手冊: 函數參考》影響PHP行為的擴充》錯誤處理和日誌記錄》預定義常量
1 <?php 2 function getBinStr($e) { 3 $s = decbin($e); //這是一個位元字字串 4 /* 5 str_pad($str1,長度n,$str2,位置w)函數: 6 將字串$str1,用字串$str2填充到指定的長度n, 7 可以指定填充的位置w,左邊填充還是右邊填充 8 */ 9 $s1 = str_pad($s,16,"0",STR_PAD_LEFT); 10 return $s1; 11 } 12 echo "<pre>"; 13 echo "E_EEROR = ".E_ERROR . "\t\t其對應二進位值為: " . getBinStr(E_ERROR); //1 14 echo "<br />E_WARNING = ".E_WARNING. "\t\t其對應二進位值為: " . getBinStr(E_WARNING); //2 15 echo "<br />E_NOTICE = ".E_NOTICE. "\t\t其對應二進位值為: " . getBinStr(E_NOTICE); //8 16 echo "<br />E_USER_NOTICE = ".E_USER_NOTICE. "\t\t其對應二進位值為: " . getBinStr(E_USER_NOTICE); //1024 17 echo "<br />E_ALL = ".E_ALL. "\t\t其對應二進位值為: " . getBinStr(E_ALL); //32767 18 echo "</pre>"; 19 ?>
查看錯誤分級對應的位元測試
錯誤觸發
1) 方式1: 系統觸發
典型錯誤3種:
E_NOTICE: 提示性錯誤: 會輸出錯誤提示,並繼續執行後續代碼;如:使用不存在的變數或常量
E_WARNING: 警告性錯誤: 會輸出錯誤提示,並繼續執行後續代碼; 如: include載入一個不存在的檔案:
E_ERROR: 致命錯誤: 導致程式無法執行後續語句; 如: 一個不存在的函數!!
2) 方式2: 自訂觸發
1) 概念: 當處理某些資料時,資料本身沒有錯誤,但根據具體應用(業務)的需要,會要求資料滿足某種條件,而該資料並不滿足的時候,可以在程式中“主動”去觸發(建立)一個錯誤,以表明該資料的“非法性”。
2) 文法形式: trigger_error(“錯誤提示資訊內容”,3種使用者錯誤代號之一);
如果觸發了使用者的致命錯誤(E_USER_ERROR),會終止程式的後續執行
錯誤報表的顯示
1) 錯誤報表: 顯示在網頁上的錯誤提示內容
2) 是否顯示錯誤報表 ? display_errors
方式1:全域設定
修改設定檔php.ini 的配置項 display_errors = On; //表示顯示 如果是Off表示關閉
方式2: 局部設定
在php指令檔中使用函數ini_set()來對它進行設定; 如 ini_set("display_errors",0); //不顯示錯誤報表
該方式設定要優先於全域設定
3) 顯示哪些層級的錯誤報表? error_reporting
前提: display_errorrs=On;
方式1: 全域設定
修改設定檔php.ini 的配置項error_reporting, 如 : error_reporting = E_NOTICE | E_WARNING | E_ERROR
方式2: 局部設定
在php指令檔中使用函數ini_set()來對它進行設定 , 如init_set(“error_reporting”,E_NOTICE | E_WARNING | E_ERROR),
錯誤記錄檔的記錄
1)是否記錄錯誤記錄檔? log_errors
方式1: 全域設定
修改設定檔php.ini 的配置項log_errors, 如 : log_errors= On; //記錄錯誤記錄檔
方式2: 局部設定
在php指令檔中使用函數ini_set()來對它進行設定 , 如init_set(“log_errors”,1);//記錄錯誤記錄檔
擷取php.ini配置項: ini_get("配置項"); //擷取php.ini的指定配置項值
2)記錄到哪裡? error_log
可以指定位置或記錄到系統日誌中
指定位置檔案中:直接使用檔案名稱,系統會自動在檔案夾下都建立該檔案名稱,並用其記錄該檔案夾下的所有網頁檔案發生的錯誤資訊。
ini_set("error_log", "myError.txt"); //如果有錯誤,將記錄在myError.txt檔案中
寫入系統日誌中: ini_set("error_log", "syslog");//所有錯誤記錄檔記錄到系統 記錄檔 中
自訂錯誤處理器
1)錯誤處理器: 發生錯誤,用來處理該錯誤的一種方法。實質就是一個函數
2) 自訂錯誤處理器: 將原本有系統處理錯誤變為開發人員自訂對錯誤顯示和記錄處理
3) 分2步:
step 1: 設定用於處理錯誤的函數 set_error_handler("函數名"); 如 set_error_handler('myError');
step 2: 聲明定義處理錯誤的函數。 如 function myError($errCode, $errMsg, $errFile, $errLine) { //錯誤處理 }
1 <?php 2 //自訂錯誤處理器 3 //第一步: 設定要作為錯誤處理的函數名 4 set_error_handler("my_error_handler"); 5 6 //第2步: 定義函數 7 /** 8 * 自訂錯誤處理函數 9 * 該函數不要在程式中調用,一發生錯誤會被自動調用,而且會傳入該4個實參資料 10 * @param string $errCode 錯誤代號(層級) 11 * @param string $errMsg 錯誤資訊的內容 12 * @param string $errFile 發生錯誤的檔案名稱 13 * @param int $errLine 代表發生錯誤的行號 14 * @return void 15 */ 16 function my_error_handler($errCode,$errMsg,$errFile,$errLine) { 17 $str = ''; 18 $str .= "<p><b><font color='red'>錯誤:</font></b>"; 19 $str .= "<br />錯誤代號是:".$errCode; 20 $str .= "<br />錯誤內容是:".$errMsg; 21 $str .= "<br />錯誤檔案是:".$errFile; 22 $str .= "<br />錯誤行號是:".$errLine; 23 $str .= "<br />發生的時間:".date("Y-m-d H:i:s"); 24 $str .= "</p>"; 25 echo $str; //輸出該“構建”的錯誤完整處理結果 26 //可以將該內容寫入到某個檔案去,既記錄錯誤記錄檔 27 } 28 29 //以下是錯誤碼 30 echo "<br />aaaa"; 31 echo $v1; //使用不存在的變數 32 echo C1; // 使用不存在的常量 33 echo "<br />bbbb"; 34 echo "<hr />";
點擊查看自訂錯誤處理器測試
以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!