日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

PHP中错误处理集合

發(fā)布時間:2024/1/17 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP中错误处理集合 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

PHP錯誤處理

錯誤的分類

通常分3種:

?

語法錯誤:

程序運行之前,都要先檢查語法。如果語法有錯誤,就會立即報錯,并且不會去執(zhí)行程序。

?

運行時錯誤:

就是在程序語法檢查通過后,,開始運行程序并在此過程中遇到的錯誤。常見的有3中:

提示性錯誤:

警告性錯誤:

致命錯誤:

?

邏輯錯誤:

指的是,程序本身可以正常執(zhí)行,沒有報錯——但"計算結(jié)果"卻錯了。

?

錯誤的分級

php語言中,將各種錯誤進行了不同級別的分類歸納,并形成大約有10幾個級別的錯誤,這就是技術(shù)層面的錯誤分級。

每一級別的錯誤,都有一個"代號",這個代號其實也就是一個系統(tǒng)內(nèi)部的"常量而已"。比如:

?

系統(tǒng)常見錯誤:

E_ERROR:????????致命錯誤

E_WARNING:????警告性錯誤

E_NOTICE:????????提示性錯誤

用戶可自定義的錯誤:

E_USER_ERROR:????????自定義致命錯誤

E_USER_WARNING:????????自定義警告性錯誤

E_USER_NOTICE:????????自定義提示性錯誤

其他:

E_STRICT:????????嚴謹性語法檢查錯誤

E_ALL????????????代表"所有錯誤"。

?

詳細參考手冊:

?

?

下面來看看這些錯誤代號的實際值:

運行結(jié)果為:

?

錯誤的觸發(fā)

錯誤的觸發(fā),就是讓錯誤"發(fā)生"。

有兩種方式會觸發(fā)錯誤:

?

系統(tǒng)觸發(fā)

程序運行到某行代碼,確實出現(xiàn)了某種錯誤,此時系統(tǒng)就會報錯——這就是觸發(fā)了系統(tǒng)錯誤。

系統(tǒng)觸發(fā)的典型錯誤有這3種:

E_NOTICE:????????提示性錯誤:會輸出錯誤提示,并繼續(xù)執(zhí)行后續(xù)代碼;

比如使用不存在的變量或常量:

?

E_WARNING:????警告性錯誤:會輸出錯誤提示,并繼續(xù)執(zhí)行后續(xù)代碼(也可能看具體情況,比如require)

比如include載入一個不存在的文件:

E_ERROR:????????致命錯誤:導(dǎo)致程序無法執(zhí)行后續(xù)語句;

比如調(diào)用一個不存在的函數(shù)!

自定義觸發(fā):

當(dāng)我們處理某些數(shù)據(jù)的時候,本來數(shù)據(jù)本身是沒有錯誤的,但根據(jù)具體應(yīng)用(業(yè)務(wù))的需要,會要求數(shù)據(jù)滿足某種條件,而該數(shù)據(jù)并不滿足的時候,我們就可以在程序中"主動"去觸發(fā)(創(chuàng)建)一個錯誤,以表明該數(shù)據(jù)的"非法性"。

語法形式:

trigger_error("錯誤提示信息內(nèi)容", 3中用戶錯誤代號之一);

其中觸發(fā)了用戶的致命錯誤(E_USER_ERROR),也會終止程序的后續(xù)執(zhí)行。

?

錯誤報告的顯示問題

所謂錯誤報告,就是顯示在網(wǎng)頁上的錯誤提示內(nèi)容!

?

有關(guān)錯誤報告,有2個問題需要處理:

?

是否顯示錯誤報告(display_errors):

有2種做法可以來設(shè)定是否顯示:

做法1:

在php.ini文件中,設(shè)定display_erros的值,為on(顯示),或為off(不顯示)

可以修改為:

當(dāng)然,作為開發(fā)階段,我們都應(yīng)該顯示錯誤信息。

?

注意:前提條件都是我們apache已經(jīng)裝載了php.ini文件——這一點,需要在apache的配置文件httpd.config中加入如下一行:

PHPIniDir "php.ini文件的了位置(路徑)"

比如:

?

方法2:

直接在php的腳本文件中設(shè)使用函數(shù)ini_set()來對其進行設(shè)置:

當(dāng)然,如果設(shè)置為1,就是顯示!

?

注意:

1,不管哪種形式,該單詞是一樣的:display:errors

2,使用php.ini配置,影響的是全局(即所有php網(wǎng)頁);

3,在某個腳本代碼中使用ini_set()設(shè)置,就只影響該腳本代碼本身——這是常用的方式。

4,腳本中的設(shè)置優(yōu)先于php.ini中的設(shè)置。

?

顯示哪些級別的錯誤報告(error_reporting):

顯然,前提是"display_errors"設(shè)置為On(或1),表示可以顯示。

?

顯示哪些級別的錯誤報告,也有2個做法:

做法1:在php.ini文件中;

這個值目前代表"所有錯誤",都顯示。

修改為:

此時就只顯示E_NOTICE級別的錯誤

更多示例為:

error_reporting = E_NOTICE | E_WARING | E_ERROR????????//顯示該3種;

error_reporting = E_ERROR | E_USER_ERROR????????????????//顯示該2種嚴重錯誤

要想代表真正的"所有錯誤",應(yīng)該寫為:E_ERROR | E_STRICT,圖示如下:

?

做法2:在當(dāng)前的腳本代碼中:

跟php.ini中設(shè)置其實是一樣,舉一些例子如下:

ini_set("error_reporting", E_NOTICE);????//就顯示該一個級別的錯誤

ini_set("error_reporting", E_NOTICE | E_WARNING),????//顯示2個級別

ini_set("error_reporting", E_NOTICE | E_WARNING | E_ERROR),????//顯示3個級別

ini_set("error_reporting", E_ALL | E_STRICT),????//這才代表顯示所有錯誤!

?

錯誤日志的記錄問題

錯誤日志其實就是錯誤報告,只是它會"寫入文件中",此時就稱為錯誤日志!

?

也有2個問題,每個問題也有2種做法:

?

是否記錄log_errors:

php.ini中:

log_errors = On 或 Off

?

腳本中:

ini_set("log_erros", 1); 或 0

?

補充一句:

1:ini_set("php配置項", 值);????//用于腳本中設(shè)置php.ini中是某項的值。

2,:$v1 = ini_get("php配置項");????//用于獲取php.ini中是某項的值

?

記錄到哪里error_log:

一般就只有2個寫法:

寫法1:直接使用一個文件名,此時系統(tǒng)會自動在每個文件夾下都建立該文件名,并用其記錄該文件夾下的所有網(wǎng)頁文件發(fā)生的錯誤信息。

然后執(zhí)行一個有錯誤的網(wǎng)頁,并可以觀察到:

其中的內(nèi)容大約為:

?

?

寫法2:使用一個特殊的名字"syslog",則此時所有錯誤信息都會記錄到系統(tǒng)的"日志文件"中。

系統(tǒng)日志文件在這里:控制面板》管理工具》事件查看器》window日志》應(yīng)用程序:

?

然后執(zhí)行一個有錯誤的網(wǎng)頁,并可以觀察到:

?

?

自定義錯誤處理器

什么叫錯誤處理器?

就是一旦發(fā)生錯誤,用來處理該錯誤的一種"機器"——其實就是一個函數(shù)。

?

自定義錯誤處理,就是指:

讓系統(tǒng)不要去處理錯誤了,而完全由我們(開發(fā)者)來對錯誤進行處理:顯示和記錄。

?

做法,其實非常簡單,就2步:

?

第一步:

設(shè)定要用于處理錯誤的函數(shù)名!

set_error_handler("f1");

第二步:

去定義該函數(shù)!

function f1(){

//這里可以任意寫代碼:自然正常是去顯示錯誤報告,和記錄錯誤日志。

}

?

?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的PHP中错误处理集合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。