• 二,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);
    }

      

  • 相关阅读:
    TomCat安装配置教程
    Java桌面程序打包成exe可执行文件
    【android studio】 gradle配置成本地离线zip包
    使用Android Studio过程中,停留在“Building ‘工程名’ Gradle project info”的解决方法
    Android studio启动后卡在refreshing gradle project(包解决)
    Genymotion的安装与使用(附百度云盘下载地址,全套都有,无需注册Genymotion即可使用)
    CodeForcesGym 100735G LCS Revised
    CodeForcesGym 100735D Triangle Formation
    CodeForcesGym 100735B Retrospective Sequence
    HDU 2829 Lawrence
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/4901736.html
Copyright © 2020-2023  润新知