亚洲人成在线观看一区二区 _狠狠88综合久久久久综合网_亚洲品质自拍_国产精品国产a

首頁 > 職業資格  > 

php中set-error-handler的用法

2023-02-16   來源:萬能知識網

set_error_handler() 函數設置用戶自定義的錯誤處理函數。該函數用于創建運行時期間的用戶自己的錯誤處理方法。該函數會返回舊的錯誤處理程序,若失敗,則返回 null。以下是小編為大家搜索整理php中set_error_handler的用法,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

set_error_handler()


(資料圖片僅供參考)

PHP從4.1.0開始提供了自定義錯誤處理句柄的功能函數set_error_handler(),但很少數腳本編寫者知道。set_error_handler這個函數可以很好地防止錯誤路徑泄露,當然還有其它更多的作用。

1.可以用來屏蔽錯誤。 出現錯誤一來會把一些信息暴漏給用戶,極有可能成為黑客攻擊你網站的工具。 二來讓用戶覺得你的水平很挫。

2.可以記下錯誤的信息, 及時發現一些生產環境的出現的問題。

3.可以做相應的處理, 出錯的時候可以顯示跳轉到預先定義好的出錯頁面,提供更好的用戶體驗。

4.可以作為調試工具, 一些時候必須在生產環境調試一些東西, 但又不想影響正在使用的用戶。

5.。。。。

set_error_handler的使用方法如下:

view sourceprint?1 string set_error_handler ( callback error_handler [, int error_types])

我們利用error_reporting();看到的錯誤信息包括三個部分,錯誤信息,錯誤文件的絕對地址,錯誤出現的行數。其實還有一個是錯誤類型。Array ( [type] => 1 [message] => Call to undefined method SomeClass::somemedthod() [file] => /home/zhangy/www/aaaa/stasdf.php [line] => 67 ),頁面的絕對路徑最好不要暴露給別人,不然給有些人可稱之機,為了杜絕這一點,好多人都會采用,ini_set("display_errors",0);直接把錯誤信息給屏蔽掉了。這樣就不方便了,如果我們要看信息怎么辦呢?每次查看的時候,是不是都要改一下代碼,或者是改一下apache的配置,在重起一下呢?

php有函數set_error_handler可以解決這個問題

用法如下:

mixed set_error_handler ( callback $error_handler [, int $error_types = E_ALL | E_STRICT ] )

php函數register_shutdown_function也可以解決這個問題

用法如下:

int register_shutdown_function ( string $func )

個人覺得報錯函數自己定義,至少有三點好處,

1,不會把文件的絕對路徑顯示出來,安全些

2,即使真的出現了錯誤信息,我們可以對錯誤信息進行處理,讓用戶也看不到fatal error這樣的東西。用戶體驗要好

3,項目上線后,有的時候,你還是要幫用戶去解決問題,這個時候難免要去修改代碼,但是我們又要讓錯誤信息報出來,又不能讓用戶看到,這個時候,用set_error_handler這樣的`函數就很爽了。

個人做了一個小測試

error_reporting(0);

register_shutdown_function("error_alert");

function error_alert()

{

if(is_null($e = error_get_last()) === false)

{

set_error_handler("errorHandler");

if($e["type"] == 1){

trigger_error("fatal error", E_USER_ERROR);

}elseif($e["type"] == 8){

trigger_error("notice", E_USER_NOTICE);

}elseif($e["type"] == 2){

trigger_error("warning", E_USER_WARNING);

}else{

trigger_error("other", E_USER_OTHER);

}

}else{

echo "no error";

}

}

set_error_handler("errorHandler");

function errorHandler($errno, $errstr, $errfile, $errline,$errcontext)

{

switch ($errno) {

case E_USER_ERROR:

echo "My ERROR [$errno] $errstr

n";

echo " Fatal error on line $errline in file $errfile";

echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")

n";

break;

case E_USER_WARNING:

echo "My WARNING [$errno] $errstr

n";

echo " warning on line $errline in file $errfile";

echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")

n";

break;

case E_USER_NOTICE:

echo "My NOTICE [$errno] $errstr

n";

echo " notice on line $errline in file $errfile";

echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")

n";

break;

default:

echo "Unknown error type: [$errno] $errstr

n";

echo " warning on line $errline in file $errfile";

echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")

n";

break;

}

return true;

}

class SomeClass {

public function someMethod() {

}

}

SomeClass::someMedthod();

$a="asdf";

foreach($a as $d){

echo $d;

}

?>

現在我們就用自定義的錯誤處理把實際路徑過濾掉。假設有一個變量$admin,我們是用來判斷訪問者是否是管理員的(可以通過IP或者登錄的用戶id來做這個判斷)

//admin為管理員的身份判定,true為管理員。

//自定義的錯誤處理函數一定要有這4個輸入變量$errno,$errstr,$errfile,$errline,否則無效。

function my_error_handler($errno,$errstr,$errfile,$errline)

{

//如果不是管理員就過濾實際路徑

if(!admin)

{

$errfile=str_replace(getcwd(),"",$errfile);

$errstr=str_replace(getcwd(),"",$errstr);

}

switch($errno)

{

case E_ERROR:

echo "ERROR: [ID $errno] $errstr (Line: $errline of $errfile) n";

echo "程序已經停止運行,請聯系管理員。";

//遇到Error級錯誤時退出腳本

exit;

break;

case E_WARNING:

echo "WARNING: [ID $errno] $errstr (Line: $errline of $errfile) n";

break;

default:

//不顯示Notice級的錯誤

break;

}

}

這樣就自定義了一個錯誤處理函數,那么怎么把錯誤的處理交給這個自定義函數呢?

// 應用到類

set_error_handler(array(&$this,"appError"));

//示例的做法

set_error_handler("my_error_handler");

so easy,這樣,就可以很好地解決安全和調試方便的矛盾了。而且你還可以花點心思,使錯誤提示更加美觀以配合網站的風格。

上面的例子中,我把錯誤信息關掉了,而用自己的函數處理錯誤,上面的這個頁面會報fatal error,報出來的錯誤信息我們是可以利用errorHandler來控制和處理。

好了,總結一下,下面是 set_error_handler 三種用法:

Php代碼

class CallbackClass {

function CallbackFunction() {

// refers to $this

}

function StaticFunction() {

// doesn’t refer to $this

}

}

function NonClassFunction($errno, $errstr, $errfile, $errline) {

}

// 三種方法如下:

1: set_error_handler(‘NonClassFunction’); // 直接轉到一個普通的函數 NonClassFunction

2: set_error_handler(array(‘CallbackClass’, ‘StaticFunction’)); // 轉到 CallbackClass 類下的靜方法 StaticFunction

3: $o =& new CallbackClass();

set_error_handler(array($o, ‘CallbackFunction’)); // 轉到類的構造函數,其實本質上跟下面的第四條一樣。

4. $o = new CallbackClass();

// The following may also prove useful:

class CallbackClass {

function CallbackClass() {

set_error_handler(array(&$this, ‘CallbackFunction’)); // the & is important

}

function CallbackFunction() {

// refers to $this

}

}

詞條內容僅供參考,如果您需要解決具體問題
(尤其在法律、醫學等領域),建議您咨詢相關領域專業人士。

標簽

錯誤信息

推薦詞條

亚洲人成在线观看一区二区 _狠狠88综合久久久久综合网_亚洲品质自拍_国产精品国产a
欧美嫩在线观看| 看片的网站亚洲| 91麻豆精品久久久久蜜臀| 亚洲成年人网站在线观看| 欧美精品自拍偷拍动漫精品| 美女一区二区在线观看| 久久日韩精品一区二区五区| 国产乱码精品一品二品| 国产精品美女久久久久久久久| 99re8在线精品视频免费播放| 国产精品高潮呻吟久久| 欧美视频一区二区三区| 乱一区二区av| 国产精品电影院| 欧美三级电影在线观看| 激情深爱一区二区| 亚洲欧美日韩在线| 日韩欧美中文字幕制服| 成人午夜免费av| 亚洲v中文字幕| 久久伊人中文字幕| 色八戒一区二区三区| 蜜臀av性久久久久蜜臀av麻豆 | 久久久综合激的五月天| 91精品福利视频| 久久国产麻豆精品| 综合激情成人伊人| 日韩精品中文字幕在线不卡尤物| 欧美一区在线视频| 中文字幕综合网| 日韩欧美一区二区在线视频| 成人免费毛片片v| 天天影视网天天综合色在线播放 | 亚洲综合成人在线| 久久综合久久99| 欧美午夜片在线观看| 国产一区二区三区四区五区入口 | 依依成人综合视频| 亚洲精品在线电影| 在线观看亚洲精品| 国产成人超碰人人澡人人澡| 亚洲午夜久久久久久久久电影网| 久久日韩精品一区二区五区| 欧美日韩一区二区三区在线| 国产成人av电影免费在线观看| 亚洲va欧美va人人爽午夜| 欧美国产激情二区三区| 欧美一级免费大片| 色狠狠一区二区三区香蕉| 国产精品2024| 日本亚洲天堂网| 亚洲欧美韩国综合色| 久久网站最新地址| 欧美一区二区三区性视频| 色综合久久久久综合体| 国产高清在线精品| 日日夜夜免费精品| 亚洲黄色av一区| 欧美高清一级片在线观看| 日韩限制级电影在线观看| 91国内精品野花午夜精品| 粉嫩蜜臀av国产精品网站| 久久精品99国产精品日本| 亚洲福利视频三区| 亚洲女性喷水在线观看一区| 国产欧美一区二区精品性| 欧美大片国产精品| 91超碰这里只有精品国产| 91首页免费视频| 成人毛片视频在线观看| 国产伦理精品不卡| 精品一区二区三区免费毛片爱| 午夜激情一区二区| 亚洲一二三四久久| 亚洲女爱视频在线| 国产精品不卡在线观看| 香蕉成人啪国产精品视频综合网 | 精品在线一区二区| 日韩av不卡一区二区| 亚洲h动漫在线| 一区二区三区四区在线播放| 中文字幕在线视频一区| 国产日韩精品一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美一区二区视频在线观看2022| 欧美日韩精品免费| 欧美在线播放高清精品| 在线免费观看成人短视频| 94-欧美-setu| 99re成人精品视频| 色综合久久99| 色悠悠久久综合| 一本一本久久a久久精品综合麻豆| 成人毛片视频在线观看| 99在线热播精品免费| 成人精品国产一区二区4080| 国产.欧美.日韩| 懂色av一区二区夜夜嗨| 处破女av一区二区| 成人精品国产免费网站| 不卡一区中文字幕| 99久久久免费精品国产一区二区| 成人激情免费视频| voyeur盗摄精品| 99精品视频在线免费观看| 91蝌蚪porny| 91黄视频在线观看| 精品视频一区二区不卡| 欧美日本一区二区| 欧美一级日韩免费不卡| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲男同性恋视频| 亚洲国产精品欧美一二99| 亚洲成人7777| 青青草原综合久久大伊人精品| 奇米影视7777精品一区二区| 久久99精品久久久久久| 国产一区欧美一区| 成人午夜视频福利| 91精品福利在线| 91精品婷婷国产综合久久性色| 日韩午夜精品视频| 国产午夜精品一区二区三区视频| 中文字幕精品—区二区四季| 日韩毛片在线免费观看| 亚洲自拍偷拍图区| 日产欧产美韩系列久久99| 久久99国产精品免费网站| 国产99久久久国产精品潘金| 99综合影院在线| 精品人在线二区三区| 日韩三级伦理片妻子的秘密按摩| 日韩午夜小视频| 中文字幕乱码久久午夜不卡| 亚洲欧美电影一区二区| 日本成人在线电影网| 国产精品一线二线三线| 91丨九色丨黑人外教| 欧美日韩国产一区| 欧美精品一区二区三| 国产精品成人一区二区三区夜夜夜 | 日韩片之四级片| 国产精品免费丝袜| 亚洲成人一二三| 韩国av一区二区三区在线观看| 成人三级在线视频| 欧美天堂一区二区三区| 精品国产免费一区二区三区香蕉| 国产偷国产偷精品高清尤物| 亚洲毛片av在线| 久久精品久久99精品久久| 成人黄色网址在线观看| 欧美日韩一区二区三区不卡| 欧美精品一区二区蜜臀亚洲| 亚洲老司机在线| 全国精品久久少妇| 不卡视频一二三| 欧美日韩日日夜夜| 欧美经典三级视频一区二区三区| 亚洲一区二区三区自拍| 国产一区二区三区免费| 日本道精品一区二区三区| 久久这里只有精品首页| 亚洲一级二级三级在线免费观看| 国产精品综合二区| 欧美性猛交xxxxxxxx| 久久亚洲精华国产精华液| 亚洲欧美综合在线精品| 蜜桃精品视频在线| 91美女片黄在线观看| 26uuu国产一区二区三区| 一区二区三区免费在线观看| 国产一区二区在线影院| 欧美色网一区二区| 中文字幕免费一区| 美女国产一区二区| 色一情一乱一乱一91av| 26uuu亚洲综合色| 亚洲成人777| 91网站黄www| 久久久久久久久一| 亚洲成人高清在线| eeuss鲁片一区二区三区 | 欧美一级国产精品| 亚洲一区二区成人在线观看| 成人小视频免费在线观看| 日韩欧美视频一区| 亚洲福利视频导航| 99久久精品国产毛片| 久久综合av免费| 日韩精品亚洲专区| av一区二区三区在线| 久久久亚洲午夜电影| 日韩中文字幕亚洲一区二区va在线| 成人黄色a**站在线观看| 精品免费视频一区二区| 香港成人在线视频| 色94色欧美sute亚洲线路二| 国产精品五月天| 国产美女精品在线|