PHP檔案載入和錯誤處理的介紹

來源:互聯網
上載者:User
這篇文章主要介紹了關於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!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.