国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP set_error_handler()函數使用詳解(示例)

PHP set_error_handler()函數使用詳解(示例)

2020-05-28 14:07PHP教程網 PHP教程

本文詳細介紹PHP set_error_handler()函數的使用方法,最后還提供了一個實例

我們寫程序,難免會有問題(是經常會遇到問題 ),而PHP遇到錯誤時,就會給出出錯腳本的位置、行數和原因。有很多人說,這并沒有什么大不了。確實,在調試程序階段,這確實是沒啥的,而且我認為給出錯誤路徑是必要的。
但泄露了實際路徑的后果是不堪設想的,對于某些入侵者,這個信息可是非常重要,而事實上現在有很多的服務器都存在這個問題。有些網管干脆把PHP配置文件中的display_errors設置為Off來解決(貌似我們就是這樣做的),但本人認為這個方法過于消極。
有些時候,我們的確需要PHP返回錯誤的信息以便調試。而且在出錯時也可能需要給用戶一個交待,甚至導航到另一頁面。那么,有啥解決辦法呢?
set_error_handler()
PHP從4.1.0開始提供了自定義錯誤處理句柄的功能函數set_error_handler(),但很少數腳本編寫者知道。set_error_handler這個函數可以很好地防止錯誤路徑泄露,當然還有其它更多的作用。
可以用來屏蔽錯誤。 出現錯誤一來會把一些信息暴漏給用戶,極有可能成為黑客攻擊你網站的工具。 二來讓用戶覺得你的水平很挫。
可以記下錯誤的信息, 及時發現一些生產環境的出現的問題。
可以做相應的處理, 出錯的時候可以顯示跳轉到預先定義好的出錯頁面,提供更好的用戶體驗。
可以作為調試工具, 一些時候必須在生產環境調試一些東西, 但又不想影響正在使用的用戶。
set_error_handler的使用方法如下:

復制代碼 代碼如下:


string set_error_handler ( callback error_handler [, int error_types])


現在我們就用自定義的錯誤處理把實際路徑過濾掉。假設有一個變量$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,這樣,就可以很好地解決安全和調試方便的矛盾了。而且你還可以花點心思,使錯誤提示更加美觀以配合網站的風格。
原作者給出了兩點需要注意的地方,我也放出來吧,希望引起廣大同胞們的注意:
1、E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、 E_COMPILE_ERROR、E_COMPILE_WARNING是不會被這個句柄處理的,也就是會用最原始的方式顯示出來。不過出現這些錯誤都是編 譯或PHP內核出錯,在通常情況下不會發生。
2、使用set_error_handler()后,error_reporting ()將會失效。也就是所有的錯誤(除上述的錯誤)都會交給自定義的函數處理。
最后,出一個示例

復制代碼 代碼如下:


//先定義一個函數,也可以定義在其他的文件中,再用require()調用 
function myErrorHandler($errno, $errstr, $errfile, $errline) 

     //為了安全起見,不暴露出真實物理路徑,下面兩行過濾實際路徑 
    $errfile=str_replace(getcwd(),"",$errfile); 
    $errstr=str_replace(getcwd(),"",$errstr); 

    switch ($errno) { 
    case E_USER_ERROR: 

     echo "<b>My ERROR</b> [$errno] $errstr<br />\n"; 
        echo "  Fatal error on line $errline in file $errfile"; 
        echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n"; 
        echo "Aborting...<br />\n"; 
        exit(1); 
        break; 

    case E_USER_WARNING: 
        echo "<b>My WARNING</b> [$errno] $errstr<br />\n"; 
        break; 

    case E_USER_NOTICE: 
        echo "<b>My NOTICE</b> [$errno] $errstr<br />\n"; 
        break; 

    default: 
        echo "Unknown error type: [$errno] $errstr<br />\n"; 
        break; 
    } 

    /* Don't execute PHP internal error handler */ 
    return true; 


//下面開始連接MYSQL服務器,我們故意指定MYSQL端口為3333,實際為3306。 
$link_id=@mysql_pconnect("localhost:3333","root","password"); 
set_error_handler(myErrorHandler); 
if (!$link_id) { 
    trigger_error("出錯了", E_USER_ERROR); 

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 黄色网页在线 | 成人av影视 | 做视频免费观看网站 | 久久亚洲欧美日韩精品专区 | 丝袜美腿一区二区三区 | 岛国黄色大片 | 国产精品久久久久av | jlzzjlzz国产精品久久 | 国产精品久久久久久一区二区三区 | 伊人6 | 免费看国产片在线观看 | 在线观看的av | 一区二区三区 在线 | 国产原创精品视频 | 视频一区二区中文字幕 | 欧美日韩精品免费观看 | 国产精品久久亚洲 | 日韩激情一区二区三区 | 色婷婷导航| 国产精品永久久久久久久久久 | 国产一区久久久 | 国产精品a久久久久 | 久久久婷婷 | av在线日韩 | 色嫩紧中文字幕在线 | 国产剧情一区二区 | 色天天综合久久久久综合片 | 天堂伊人网 | 日韩视频精品 | 91久久精品一区二区二区 | 日韩中文字幕一区二区三区 | 精品一区二区三区中文字幕老牛 | 一区二区国产视频 | 精品久久久久久久久久久 | 99视频免费 | 五月婷婷在线视频 | 欧美精品在线一区二区三区 | 国产一区二区三区在线视频观看 | 亚洲视频一区在线观看 | 大毛片 | 在线激情网站 |