欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP 錯(cuò)誤處理機(jī)制

 更新時(shí)間:2015年07月06日 10:53:21   投稿:hebedich  
這篇文章主要介紹了PHP 錯(cuò)誤處理機(jī)制的相關(guān)資料,十分的詳細(xì),也很實(shí)用,需要的朋友可以參考下

在日常的項(xiàng)目開發(fā)過程中,總是會(huì)出現(xiàn)一些我們意想不到的異常錯(cuò)誤,如果我們對(duì)此沒有進(jìn)行相對(duì)完善的處理,那么程序看上去也很不專業(yè),也很可能就會(huì)成為別人攻擊系統(tǒng)的有效信息;有些錯(cuò)誤異常會(huì)終止腳本執(zhí)行,這個(gè)時(shí)候如果沒有一些錯(cuò)誤提示信息的話,那么我們只能從頭開始看代碼了,要知道項(xiàng)目中成百上千行的代碼對(duì)我們來說是件多么恐怖的事情啊,那么我們?nèi)绾卧陧?xiàng)目開發(fā)的過程中快速準(zhǔn)確地定位到異常、錯(cuò)誤呢,并進(jìn)行相應(yīng)的處理,本文由自己對(duì)錯(cuò)誤、異常處理的了解,再此分享與大家相互學(xué)習(xí)交流,并作為一個(gè)備忘。

系統(tǒng)錯(cuò)誤處理器:

PHP正常情況下,錯(cuò)誤會(huì)正常的輸出,但在一些框架中,可能會(huì)影響錯(cuò)誤的輸出,可能是框架本身有自己的處理機(jī)制,也可能代碼中作處理了,一般是這幾個(gè)函數(shù)設(shè)置:

1.error_reporting();  設(shè)置PHP 的報(bào)錯(cuò)級(jí)別并返回當(dāng)前級(jí)別

  error_reporting(report_level)

如果參數(shù) level 未指定,當(dāng)前報(bào)錯(cuò)級(jí)別將被返回。下面幾項(xiàng)是 level 可能的值:

常量

描述

1

E_ERROR

致命的運(yùn)行時(shí)錯(cuò)誤。不能回收此錯(cuò)誤。腳本被中斷執(zhí)行。

2

E_WARNING

非致命的運(yùn)行時(shí)警告。腳本不被中斷執(zhí)行。

4

E_PARSE

編譯時(shí)分析錯(cuò)誤。解析應(yīng)該只由分析器生成的錯(cuò)誤

8

E_NOTICE

運(yùn)行時(shí)通知。該腳本發(fā)現(xiàn)可能是一個(gè)錯(cuò)誤,但通常運(yùn)行一個(gè)腳本時(shí),也可能發(fā)生

16

E_CORE_ERROR

致命錯(cuò)誤在PHP啟動(dòng)時(shí)。這就好比在PHP核心的E_ERROR

32

E_CORE_WARNING

PHP啟動(dòng)時(shí)警告。這就好比在PHP核心的E_WARNING

64

E_COMPILE_ERROR

致命的編譯時(shí)錯(cuò)誤。這就好比通過了Zend腳本引擎產(chǎn)生的E_ERROR

128

E_COMPILE_WARNING

非致命編譯時(shí)警告。這就好比通過了Zend腳本引擎產(chǎn)生E_WARNING

256

E_USER_ERROR

致命的用戶生成的錯(cuò)誤,這類似于程序員使用PHP函數(shù) trigger_error() 設(shè)置的 E_ERROR

512

E_USER_WARNING

非致命的用戶生成的警告,這類似于程序員使用PHP函數(shù) trigger_error 設(shè)置的 E_WARNING

1024

E_USER_NOTICE

用戶生成的通知,這類似于程序員使用PHP函數(shù)trigger_error 設(shè)置的 E_NOTICE

2048

E_STRICT

運(yùn)行時(shí)通知。PHP建議改變你的代碼,以幫助該代碼的互操作性和兼容性

4096

E_RECOVERABLE_ERROR

可捕獲的致命錯(cuò)誤,類似 E_ERROR,但可被用戶定義的處理程序捕獲(參見 set_error_handler()

8191

E_ALL

所有的錯(cuò)誤和警告,除級(jí)別E_STRICT在PHP6.0中,E_STRICT將是E_ALL的一部分)

這里值得注意的是,$level為0的時(shí)候是關(guān)閉錯(cuò)誤輸出,也就是任何錯(cuò)誤都不會(huì)輸出。

2.set_error_handler()

定義和用法

set_error_handler() 函數(shù)設(shè)置用戶自定義的錯(cuò)誤處理函數(shù)。

該函數(shù)用于創(chuàng)建運(yùn)行時(shí)期間的用戶自己的錯(cuò)誤處理方法。

該函數(shù)會(huì)返回舊的錯(cuò)誤處理程序,若失敗,則返回 null。

語法

set_error_handler(error_function,error_types)

參數(shù)

描述

error_function

必需。規(guī)定發(fā)生錯(cuò)誤時(shí)運(yùn)行的函數(shù)。

error_types

可選。規(guī)定在哪個(gè)錯(cuò)誤報(bào)告級(jí)別會(huì)顯示用戶定義的錯(cuò)誤。默認(rèn)是 "E_ALL"。

提示:如果使用了該函數(shù),會(huì)完全繞過標(biāo)準(zhǔn)的 PHP 錯(cuò)誤處理函數(shù),如果必要,用戶定義的錯(cuò)誤處理程序必須終止 (die() ) 腳本,

注釋:如果在腳本執(zhí)行前發(fā)生錯(cuò)誤,由于在那時(shí)自定義程序還沒有注冊(cè),因此就不會(huì)用到這個(gè)自定義錯(cuò)誤處理程序。

測(cè)試代碼如下:

/**
 *
 * @param type $error_level 錯(cuò)誤級(jí)別
 * @param type $error_message    錯(cuò)誤信息
 * @param type $error_file 可選 錯(cuò)誤文件
 * @param type $error_line 可選 錯(cuò)誤行
 * @param type $error_context 可選。規(guī)定一個(gè)數(shù)組,包含了當(dāng)錯(cuò)誤發(fā)生時(shí)在用的每個(gè)變量以及它們的值。
 */
function my_error($error_level, $error_message, $error_file, $error_line, $error_context) {
  echo date('Y-m-d H:i:s') . $error_level . $error_message . $error_file . $error_line;
  var_dump($error_context);
}
set_error_handler('my_error', E_ALL);
print_r($a);
 

//通過上案例可以得知,在注冊(cè) my_error 方法時(shí),系統(tǒng)會(huì)自動(dòng)覆蓋原有的錯(cuò)誤處理 error_fuction() 方法
以上程序運(yùn)行結(jié)果:

自定義錯(cuò)誤觸發(fā)器

定義和用法

trigger_error() 函數(shù)創(chuàng)建用戶定義的錯(cuò)誤消息。

trigger_error() 用于在用戶指定的條件下觸發(fā)一個(gè)錯(cuò)誤消息。它與內(nèi)建的錯(cuò)誤處理器一同使用,也可以與由 set_error_handler() 函數(shù)創(chuàng)建的用戶自定義函數(shù)使用。

如果指定了一個(gè)不合法的錯(cuò)誤類型,該函數(shù)返回 false,否則返回 true。

語法

trigger_error(error_message,error_types)

參數(shù)

描述

error_message

必需。規(guī)定錯(cuò)誤消息。長(zhǎng)度限制為 1024 個(gè)字符。

error_types

可選。規(guī)定錯(cuò)誤消息的錯(cuò)誤類型。 可能的值:

  • E_USER_ERROR
  • E_USER_WARNING
  • E_USER_NOTICE
測(cè)試代碼如下:

/**
 *
 * @param type $level
 * @param type $msg
 */
function my_error($level, $msg) {
  switch ($level) {
  case E_USER_ERROR:
    echo "ERROR:<br/>";
    break;
  case E_USER_WARNING:
    echo "WARNING:<br/>";
    break;
  case E_USER_NOTICE:
    echo "NOTICE:<br/>";
    break;
  default:
    break;
  }
  echo "錯(cuò)誤編號(hào):" . $level . " <br/>";
  echo "錯(cuò)誤信息:" . $msg;
}
//注冊(cè)錯(cuò)誤處理器
set_error_handler('my_error');
if (89 > 8) {
  //調(diào)用錯(cuò)誤觸發(fā)器
  trigger_error('這是錯(cuò)誤啊', E_USER_WARNING);
}

運(yùn)行結(jié)果如下:

WARNING:
錯(cuò)誤編號(hào):512
錯(cuò)誤信息:這是錯(cuò)誤啊

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

最新評(píng)論