• PHP-错误处理


    PHP 5 预定义错误和日志常量

    值   常量  描述
     1  E_ERROR  运行时致命的错误,会终止执行脚本。 
     2  E_WARNING  运行时的警告,非致命的错误,不终止执行脚本。 
     4  E_PARSE  编译时语法解析错误,解析错误仅仅由分析器产生。
     8  E_NOTICE  运行时的注意通知,表示脚本遇到可能会表现为错误的情况,但是在可以正常运行的脚本里面也可能会有类似的通知。
     16  E_CORE_ERROR  在 PHP 初始化启动过程中发生的致命错误。该错误类似 E_ERROR,但是是由 PHP 引擎核心产生的,不包括PHP核心造成的错误。
     32  E_CORE_WARNING  PHP 初始化启动过程中发生的警告 (非致命错误) 。类似 E_WARNING,但是是由 PHP 引擎核心产生的,不包括PHP核心错误警告。
     64  E_COMPILE_ERROR  致命编译时错误。类似 E_ERROR, 但是是由 Zend 脚本引擎产生的。
     128  E_COMPILE_WARNING  编译时警告 (非致命错误)。类似 E_WARNING,但是是由 Zend 脚本引擎产生的。
     256  E_USER_ERROR  用户产生的错误信息。类似 E_ERROR, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。
     512  E_USER_WARNING  用户产生的警告信息。类似 E_WARNING, 但是是由用户自己在代码中使用 PHP 函数 trigger_error() 来产生的。
     1024  E_USER_NOTICE  用户产生的注意信息。类似 E_NOTICE, 但是是由用户自己在代码中使用 PHP 函数 trigger_error() 来产生的。
     2048  E_STRICT  关于PHP版本移植的兼容性和互操作性的建议。
     4096  E_RECOVERABLE_ERROR  可被捕捉的致命错误。它表示发生了一个可能非常危险的错误,但是还没有导致 PHP 引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获 (参见 set_error_handler()),将成为一个 E_ERROR 从而脚本会终止运行。
     8192  E_DEPRECATED  运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。
     16384  E_USER_DEPRECATED  用户产生的警告信息。类似 E_DEPRECATED, 但是是由用户自己在代码中使用 PHP 函数 trigger_error() 来产生的。
     32767  E_ALL  E_STRICT 除外的所有错误和警告信息。

    打开一个不存在的文件

    <?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."
    ";
            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."
    ";
            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."
    ",3,"log.txt");
        }
    
        set_error_handler('my_error');
    
        function Guess_Age($age){
            if($age> 120){
                trigger_error('年龄过大'); //触发错误
            }
        }
    
        Guess_Age(123);
    ?>
    

     运行结果

    生成了一个记录错误的日志文件

  • 相关阅读:
    【Bootloader】探究bootloader,分析u-boot源码
    【内核】linux2.6版本内核编译配置选项(一)
    【内核】linux2.6版本内核编译配置选项(二)
    【内核】探究linux内核,超详细解析子系统
    【内核】几个重要的linux内核文件
    【教程】探究暴风影音视频截图黑屏原因
    【Linux技术】BusyBox详解
    【C/C++】C/C++中Static的作用详述
    cf515d
    poj1155
  • 原文地址:https://www.cnblogs.com/sch01ar/p/8580443.html
Copyright © 2020-2023  润新知