zoukankan      html  css  js  c++  java
  • PHP中的错误信息

    PHP中的错误信息

     
    php.ini中配置错误消息
    在PHP4中,没有异常 Exception这个概念,只有 错误Error。我们可以通过修改php.ini 文件来配置用户端输出的错误信息。
    在php.ini 中,一个分号 ; 表示注释。
    Php.ini 将能够显示的错误类型分为如下种类。
    ; E_ALL -所有的错误和警告,(不包含E_STRICT).
    ; E_ERROR -致命的运行时错误
    ; E_RECOVERABLE_ERROR -可由异常处理机制所捕捉 (catch/handle) 的错误
    ; E_WARNING - 运行时的警告(非致命错误)
    ; E_PARSE -编译时解析错误
    ; E_NOTICE - 运行时的提示,这些提示常常是代码中的bug引起的,也许是故意的(如使用一个未初始化的变量,事实上它被自动初始化成一个空字符串) 。
    ; E_STRICT - 运行时提示,能够给于PHP建议,以改变你的代码,以获得最好的协同性,并完善代码的兼容性。
    ; E_CORE_ERROR - PHP 初始化启动过程中的致命错误。
    ; E_CORE_WARNING - PHP 初始化启动过程中的非致命错误。
    ; E_COMPILE_ERROR - 致命的编译错误。
    ; E_COMPILE_WARNING – 编译错误(非致命的错误)。
    ; E_USER_ERROR - 用户错误信息。
    ; E_USER_WARNING - 用户警告信息。
    ; E_USER_NOTICE -用户提示信息。

    在php.ini 中error_reporting 控制输出到用户端的消息种类。
    以下几种是php.ini 中推荐的几种配置。
    error_reporting = E_ALL  表示输出所有的信息。
    error_reporting = E_ALL & ~E_NOTICE 表示输出所有的错误,除了提示。
    error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  表示输出所有的 ERROR 信息。
    在php.ini 中,display_errors可以设置是否将以上设置的错误信息输出到用户端。
    display_errors = On 输出到用户端(调试代码时候,打开这项更方便)

    display_errors = OFF 消息将不会输出到用户端(最终发布给用户时记得改成off)
    php中错误消息处理
    在php中,对于错误处理非常的宽松。php系统会尽量让程序运行下去,除非遇到致命错误。
    例5-2-1.php
    代码片段
    例:5-2-1.php
    < br/><br/><br/>
    < ?php
    echo "start......<br/>" ;
    echo $t; echo "run......<br/>" ;
    echo $b = 100/0; echo "run......<br/>" ;
    $a = new A(); echo "end........<br/>";
    ?>
    执行结果
    例:5-2-1.php
    start......
    run...... Warning: Division by zero in 5-2-1.php on line 6
    run...... Fatal error: Class 'A' not found in 5-2-1.php on line 8
    第5行,直接打印一个未赋值变量$t时候,系统报出一个 Notice,未定义变量。
    第7行,做除以0的运算时,系统报出一个Warning,提示有除以0这样的警告,程序依然在运行。
    第9行,当实例化一个不存在的类的时候,发生致命错误,程序终止运行。
    再次提示:如果不想显示错误信息给用户看到,设置php.ini中
    display_errors = OFF
    php代码中调整错误级别
    除了在php.ini文件中可以调整错误消息的显示级别外,在php代码中也可以自定义消息显示的级别。

    PHP提供了一个方便的调整函数。
    int error_reporting ( [int level] )
    使用这个函数可以定义当前php页面中错误消息的显示级别。参数level使用了二进制掩码组合的方式。
    1  E_ERROR
    2  E_WARNING
    4  E_PARSE
    8  E_NOTICE
    16  E_CORE_ERROR
    32  E_CORE_WARNING
    64  E_COMPILE_ERROR
    128  E_COMPILE_WARNING
    256  E_USER_ERROR
    512  E_USER_WARNING
    1024  E_USER_NOTICE
    2047  E_ALL
    2048  E_STRICT
    4096  E_RECOVERABLE_ERROR
    例5-2-2.php
    代码片段
    例:5-2-2.php<br/><br/><br/>
    < ?php
    error_reporting(0);
    //关闭所有错误显示
    //error_reporting(E_ERROR | E_WARNING | E_PARSE);
    //error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    //error_reporting(E_ALL ^ E_NOTICE); //php.ini错误值。
    //error_reporting(E_ALL); //显示所有错误信息。
    //ini_set('error_reporting', E_ALL);
    //error_reporting(E_ALL)同样效果的代码。
    echo "start......<br/>" ;
    echo $t; echo "run......<br/>" ;
    echo $b = 100/0; echo "run......<br/>" ;
    $a = new A();
    echo "end........<br/>"; ?>
    执行结果
    例:5-2-2.php
    start......
    run......
    run......
    自定义错误处理
    在php中,可以自定义对错误处理的方式。首先要自定义一个错误处理函数,然后使用 set_error_handler()函数向系统声明错误处理函数。代码中产生的错误就会使用这个错误处理函数了。
    使用trigger_error()函数,可以触发一个error。例如trigger_error("age you input must >= 0", E_USER_ERROR),触发自己的错误信息。
    例:5-2-3.php
    代码片段
    例:5-2-3.php
    < br/><br/><br/>
    < ?php
    function myErrorHandler($errno, $errstr, $errfile, $errline) {
    switch ($errno) {
    case E_USER_ERROR:
    echo "<b>My ERROR</b> [$errno] $errstr<br /> ";
    echo " Fatal error in line $errline of file $errfile";
    echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br /> ";
    echo "Aborting...<br /> ";
    exit(1);
    break;
    case E_USER_WARNING:
    echo "<b>My WARNING</b> [$errno] $errstr<br /> ";
    break;
    case E_USER_NOTICE:
    echo "<b>My NOTICE</b> [$errno] $errstr<br /> ";
    break;
    default: echo "Unknown error type: [$errno] $errstr<br /> ";
    break;
    }
    }
    set_error_handler("myErrorHandler"); //定义错误处理函数. $age = -100;
    //假设出现了负数的年龄,这明显是错误的。
    if ($age < 0) {
    trigger_error("age you input must >= 0", E_USER_ERROR);
    //触发错误; }
    ?>
    执行结果
    例:5-2-3.php
    My ERROR [256] age you input must >= 0 Fatal error in line 27 of file D5-2-3.php, PHP 5.1.1 (WINNT) Aborting...
  • 相关阅读:
    设计模式复习-状态模式
    设计模式复习-观察者模式
    设计模式复习-建造者模式
    设计模式复习-外观模式
    推荐算法-协同过滤
    设计模式复习-模板方法模式
    设计模式复习-原型模式
    设计模式复习-代理模式
    神经网络与机器学习 笔记—泛化和交叉验证
    神经网络与机器学习 笔记—改善反向传播的性能试探法
  • 原文地址:https://www.cnblogs.com/wangli-66/p/5604794.html
Copyright © 2011-2022 走看看