1. 程式人生 > >PHP-錯誤處理

PHP-錯誤處理

func 觸發 錯誤日誌 timezone class ble function 處理器 mage

PHP 5 預定義錯誤和日誌常量

打開一個不存在的文件

<?php
/** * Coded by MuT6 Sch01aR
 * Date: 2018/3/12 22:30
 */

	$fp = fopen(‘test.txt‘,‘r‘);
	echo ‘ok‘;
	
?>

運行結果技術分享圖片

報了一個文件不存在的警告,後面的ok成功打印

使用die()方法處理錯誤

執行完die()方法後程序會退出

<?php
/**
 * Coded by MuT6 Sch01aR
 * Date: 2018/3/12 22:30
 */

    //使用die()方法處理
    if (!file_exists(‘test.txt‘)){  //判斷文件是否存在
        die(‘不存在文件!‘);
    }
    
    //die()方法的另一個更簡便的寫法
    file_exists(‘test.txt‘) or die(‘不存在文件!!!‘)

?>

運行結果

技術分享圖片

自定義錯誤處理函數

自己定義錯誤處理的函數來處理程序的錯誤

<?php
/**
 * Author: MuT6 Sch01aR
 * Date: 2018/3/13
 * Time: 12:12
 */

    //定義一個錯誤處理函數
    function my_error($errno, $errmsg){  // $errno為錯誤號,$errmsg為錯誤信息
        echo ‘錯誤號:‘.$errno."\n";
        echo ‘錯誤信息:‘.$errmsg;
    }

    //改寫set_error_handler處理器,調用錯誤處理函數my_error處理級別為E_WARNING的錯誤
    set_error_handler(‘my_error‘, E_WARNING);

    $fp = fopen(‘test.txt‘,‘r‘);  //打開一個不存在的文件

?>

運行結果

技術分享圖片

錯誤觸發器

錯誤觸發器可以處理一些特定的錯誤

<?php
/**
 * Author: MuT6 Sch01aR
 * Date: 2018/3/13
 * Time: 12:41
 */

    $age = 121;
    if ($age > 120){
        //調用系統的觸發器
        trigger_error(‘年齡過大‘,E_USER_WARNING);
        exit();
    }

?>

運行結果

技術分享圖片

系統觸發器處理了特定的錯誤

也可以自己定義錯誤觸發器

<?php
/**
 * Author: MuT6 Sch01aR
 * Date: 2018/3/13
 * Time: 12:41
 */

    //定義一個錯誤觸發器
    function my_error($errno, $errmsg){
        echo ‘錯誤號:‘.$errno."\n";
        echo ‘錯誤信息:‘.$errmsg;
    }

    set_error_handler(‘my_error‘, E_USER_WARNING);

    $age = 121;
    if ($age > 120){
        //調用系統的觸發器
        trigger_error(‘年齡過大‘,E_USER_WARNING);
        exit();
    }

?>

運行結果

技術分享圖片

錯誤日誌

錯誤日誌用來記錄程序運行時的錯誤

<?php
/**
 * Author: MuT6 Sch01aR
 * Date: 2018/3/13
 * Time: 12:02
 */

    function my_error($errno, $errmsg){
        echo ‘錯誤號:‘.$errno.‘----‘.‘錯誤信息:‘.$errmsg;
        $error_msg = ‘錯誤號:‘.$errno.‘----‘.‘錯誤信息:‘.$errmsg;
        date_default_timezone_set("Asia/Chongqing");
        $error_time = date(‘Y-m-d G:i:s‘);
        error_log(‘[‘.$error_time.‘]‘.$error_msg."\n",3,"log.txt");
    }

    set_error_handler(‘my_error‘);

    function Guess_Age($age){
        if($age> 120){
            trigger_error(‘年齡過大‘); //觸發錯誤
        }
    }

    Guess_Age(123);
?>

運行結果

技術分享圖片

生成了一個記錄錯誤的日誌文件

技術分享圖片

PHP-錯誤處理