zoukankan      html  css  js  c++  java
  • PHP错误处理机制

    1、错误分类

    1.1、编译错误(parse error)

    大都是书写错误,如语法错误(syntax)

    1.2、运行错误

    会根据错误等级决定程序是否继续运行

    1.3、逻辑错误

    程序执行结果不符合期望

    2、错误报告级别

    每一个错误级别对应一个数字代码

       [E_ERROR] => 1
        [E_RECOVERABLE_ERROR] => 4096
        [E_WARNING] => 2
        [E_PARSE] => 4
        [E_NOTICE] => 8
        [E_STRICT] => 2048
        [E_DEPRECATED] => 8192
        [E_CORE_ERROR] => 16
        [E_CORE_WARNING] => 32
        [E_COMPILE_ERROR] => 64
        [E_COMPILE_WARNING] => 128
        [E_USER_ERROR] => 256
        [E_USER_WARNING] => 512
        [E_USER_NOTICE] => 1024
        [E_USER_DEPRECATED] => 16384
        [E_ALL] => 32767

    2.1、系统错误(E_...)

    E_PARSE //语法错误
    E_ERROR //严重错误,导致脚本中止
    E_WARNING //警告错误,但脚本不中止
    E_NOTICE //提示错误,但脚本不中止
    E_ALL包含所有的错误、警告和注意信息
    修改php配置文件设置是否显示报错:display_errors = On/Off

    2.2、自定义错误(E_USER_...)

    使用trigger_error函数可以触发用户自定义错误:trigger_error('参数不能为空',E_USER_WARNING),这种错误也会记录在服务器软件(如apache)的错误日记中

    2.3、内核错误(E_CORE_...)

    3、调整错误报告显示级别

    修改配置文件:error_reporting = E_ALL (E_ALL & ~E_NOTICE)
    使用error_reporting()函数:这种方式设置后,可以立即生效。但仅限于在当前脚本中的error_reporting()函数调用的后面区域。
    int error_reporting ([ int $level ] )
    参数可以是整型或对应的常量标识符,推荐使用常量的形式。返回值为当前位置处起作用的错误报告级别的值(整型值)。
    error_reporting(E_ALL ^ E_NOTICE); // 除了E_NOTICE之外,报告所有的错误
    error_reporting(E_ERROR); // 只报告致命错误
    echo error_reporting(E_ERROR | E_WARNING | E_NOTICE); // 只报告E_ERROR、E_WARNING 和 E_NOTICE三种错误

    4、错误处理方法

    4.1、使用 die() 函数
    采用了一个简单的错误处理机制在错误之后终止了脚本。
    4.2、自定义错误和错误触发器
    可以简单地创建了一个专用函数,可以在 PHP 中发生错误时调用该函数。
    该函数必须有能力处理至少两个参数 (error level 和 error message),但是可以接受最多五个参数(可选的:file, line-number 以及 error context):
    语法:error_function(error_level,error_message, error_file,error_line,error_context)
    参数描述
    error_level :必需。为用户定义的错误规定错误报告级别。必须是一个值数。参见下面的表格:错误报告级别。
    error_message :必需。为用户定义的错误规定错误消息。
    error_file :可选。规定错误在其中发生的文件名。
    error_line :可选。规定错误发生的行号。
    error_context :可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。
    错误报告级别
    2 E_WARNING 非致命的 run-time 错误。不暂停脚本执行。
    8 E_NOTICE Run-time 通知。脚本发现可能有错误发生,但也可能在脚本正常运行时发生。
    256 E_USER_ERROR 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。
    512 E_USER_WARNING 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。
    1024 E_USER_NOTICE 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。
    4096 E_RECOVERABLE_ERROR 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler())
    8191 E_ALL 所有错误和警告,除级别 E_STRICT 以外。(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)
    一个处理错误的函数

    function customError($errno, $errstr){ 
        echo "<b>Error:</b> [$errno] $errstr<br />";
        echo "Ending Script";
        die();
    }


    当以上函数被触发时,它会取得错误级别和错误消息。然后它会输出错误级别和消息,并终止脚本。
    set_error_handler("customError");
    由于我们希望我们的自定义函数来处理所有错误,set_error_handler() 仅需要一个参数,可以添加第二个参数来规定错误级别。

    //error handler function
    function customError($errno, $errstr){ 
        echo "<b>Error:</b> [$errno] $errstr";
    }
    //set error handler
    set_error_handler("customError");
    //trigger error
    echo($test);

    以上代码的输出应该类似Error: [8] Undefined variable: test

    触发错误trigger_error()

    $test=2;
    if ($test>1){
        trigger_error("Value must be 1 or below");
    }

    以上代码的输出应该类似这样:Notice: Value must be 1 or below in C:webfolder est.php on line 6

    可以在脚本中任何位置触发错误,通过添加的第二个参数,能够规定所触发的错误级别。
    可能的错误类型:
    E_USER_ERROR - 致命的用户生成的 run-time 错误。错误无法恢复。脚本执行被中断。
    E_USER_WARNING - 非致命的用户生成的 run-time 警告。脚本执行不被中断。
    E_USER_NOTICE - 默认。用户生成的 run-time 通知。脚本发现了可能的错误,也有可能在脚本运行正常时发生。
    综合例子
    如果 "test" 变量大于 "1",则发生 E_USER_WARNING 错误。如果发生了 E_USER_WARNING,将使用自定义错误处理程序并结束脚本:

    //error handler function
    function customError($errno, $errstr){ 
        echo "<b>Error:</b> [$errno] $errstr<br />";
        echo "Ending Script";
        die();
    }
    //set error handler
    set_error_handler("customError",E_USER_WARNING);
    //trigger error
    $test=2;
    if ($test>1){
        trigger_error("Value must be 1 or below",E_USER_WARNING);
    }

    以上代码的输出应该类似这样:Error: [512] Value must be 1 or below Ending Script

    5、错误报告

    默认根据在 php.ini 中的 error_log 配置,PHP 向服务器的错误记录系统或文件发送错误记录。通过使用 error_log() 函数,您可以向指定的文件或远程目的地发送错误记录。
    通过电子邮件向自己发送错误消息,是一种获得指定错误的通知的好办法
    在下面的例子中,如果特定的错误发生,我们将发送带有错误消息的电子邮件,并结束脚本:

    //error handler function
    function customError($errno, $errstr){ 
        echo "<b>Error:</b> [$errno] $errstr<br />";
        echo "Webmaster has been notified";
        error_log("Error: [$errno] $errstr",1,
        "someone@example.com","From: webmaster@example.com");
    }
    //set error handler
    set_error_handler("customError",E_USER_WARNING);
    //trigger error
    $test=2;
    if ($test>1){
        trigger_error("Value must be 1 or below",E_USER_WARNING);
    }
  • 相关阅读:
    Linux下的”锁“事儿
    拿得起,放得下,想得开
    关于TCP协议握手的那些事儿

    C++中的RTTI机制解析
    C/C++中产生随机数
    数据库-事务和锁
    JS 数组Array常用方法
    C# 压缩 SharpZipLib
    正则表达式学习3-负向零宽断言
  • 原文地址:https://www.cnblogs.com/chuanzi/p/10364794.html
Copyright © 2011-2022 走看看