zoukankan      html  css  js  c++  java
  • 二,php的错误处理

    php处理错误的三种方式: 简单的die()语句; 自定义错误和错误触发器;错误日志;

    1,简单的die()语句

    if(!file_exists("aaa.txt")){
        die("文件不存在");
    }else{
        $fp = fopen("aaa.txt","r");
    }
    

      上面的代码和下面的代码功能相同

    file_exists("aaa.txt") or die("文件不存在!");
    $fp = fopen("aaa.txt","r");
    

     2,自定义错误和错误触发器

     php自带错误处理器,可以自己编写错误处理器。

    (2.1)创建一个自定义的错误函数非常简单,我们可以创建一个专用函数,在PHP发生错误时候调用该函数。该函数必须有能力处理至少两个参数(error level 和error message),但是可以接受最多五个参数(可选的file,line-number以及error context):

    (2.2)基本语法:error_function(error_level,error_message,error_file,error_line,error_context)

    (a),编写错误函数。

    (b),编写set_error_handler(),通知php系统,弃用默认错误处理器,使用自定义的错误函数。

    (2.3)PHP中有不同的错误级别控制

    常量

    描述

    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以外。(在PHP6.0,E_STRRICT是E_ALL的一部分。)

    (2.4)语法错误,set_error_handler()错误控制案例,此处错误适应于E_WARNING,E_NOTICE,E_RECOVERABLE_ERROR,E_ALL。

    //定义了一个函数
    function my_error($errno,$errmes){
        echo "<font size='5' color='red'>$errno.$errmes</font>";
        exit();
    }
    //改写set_error_handler处理器
    set_error_handler("my_error",E_WARNING);
    
    //定义了一个函数
    function my_error1($errno,$errmes){
        echo "<font size='5' color='red'>$errno.$errmes</font>";
        exit();
    }
    //改写set_error_handler处理器
    set_error_handler("my_error1",E_NOTICE);
    
    $fp=fopen("aa.txt","r");
    

    (2.5)逻辑错误,trigger_error()错误控制案例,这个可以在代码中编写程序,排除逻辑错误情况,没有必要使用trigger_error()。

    $age = 700;
    if($age > 120){
        //调用触发器
        trigger_error("输入年龄过大");
        exit();
    }
    

    自定义一个错误处理函数(和上类似),此处适用于E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE。

    function my_error3($errno,$errmes){
        echo "错误号是:".$errno;
    }
    set_error_handler("my_error3",E_USER_ERROR);//此处适用于E_user_ERROR,E_user_WARNING,E_user_NOTICE
    $age = 700;
    if($age > 120){
        trigger_error("输入年龄过大",E_USER_ERROR);
    }
    

      

    3,PHP错误日志

    基本方法使用error_log(),使用方法如下,执行完如下代码,会在代码页所在的文件夹产生myerr.txt这个文件。

    function my_error3($errno,$errmes){
        $err_info = "错误号是:".$errno;
        echo $err_info;
        date_default_timezone_set("Asia/Chongqing");
        error_log("时间是".date("Y-m-d G-i-s")."--".$err_info."
    ",3,"myerr.txt");
    }
    set_error_handler("my_error3",E_USER_ERROR);//此处适用于E_user_ERROR,E_user_WARNING,E_user_NOTICE
    $age = 700;
    if($age > 120){
        trigger_error("输入年龄过大",E_USER_ERROR);
    }

      

  • 相关阅读:
    洛谷 P4708
    NFLSOJ 1060
    Codeforces 1264D
    Solution -「多校联训」Sample
    Solution -「多校联训」光影交错
    Solution -「LOJ #138」「模板」类欧几里得算法
    Solution -「LOJ #141」回文子串 ||「模板」双向 PAM
    Codeforces Round #700 (Div. 2)
    Codeforces Round #698 (Div. 2) C and D
    「NOI 2021」题解
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/4901736.html
Copyright © 2011-2022 走看看