zoukankan      html  css  js  c++  java
  • php 错误

    错误处理:指的是系统或用户,在对某些代码进行执行的时候,发现有错误,就会通过错误处理的形式告知程序员

    错误分类

      语法错误:用户书写的代码不符合php 的雨大规范,语法错误会导致代码在编译过程中不通过,所以代码不会执行

      运行时错误:代码编译通过,但是代码在执行的过程中会出现一些条件不满足导致的错误

      逻辑错误:程序员在写代码的时候不够规范,出现的一些逻辑性的错误,导致代码正常执行,但是得不到想到要的结果

    错误代号(所有看到的错误代码在php中都被定义成了系统常量,可以直接使用)

      系统错误

        E_PARSE:编译错误。代码不会执行

        E_ERROR:fatal error 致命错误,会导致代码不能正确继续执行(出错的位置断掉)

        E_WARNING:warning 警告错误,不会影响代码执行,但是可能得到意想不到的结果

        E_NOTICE:notice 通知错误,不会影响代码执行

      用户错误:E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE

        用户在使用自定义错误触发的时候,会使用到的错误代号

      其他:E_ALL :代表着所有从错误(通常在进行错误控制的时候使用比较多),建议在开发过程中使用

      

      所有以E开头的错误常量其实都是由一个字节存储,然后每一种错误占据一个对应的位,如果想进行一些错误的控制,可以使用位运算进行操作

      排除通知级别 notice:E_ALL & ^E_NOTICE

      只要警告和通知 : E_WARNING

    错误触发

      程序运行时触发:系统自动根据错误发生后,对比对应的错误信息,输出给用户:主要针对代码的语法错误和运行时错误

      人为触发:知道某些逻辑可能会出错,从而使用对应的判断代码来触发响应的错误提示,函数:trigger_error(提示的内容,错误代号);

    错误显示设置:哪些错误该显示,以及该如何显示

      在php中,其实有两种方式来设置当前脚本的错误处理

      1.php 的配置文件,全局配置:php.ini 文件

        display_errors :是否显示错误

        error_reporting :显示什么级别的错误

      2.可以在运行的php脚本中去设置,在脚本中定义的配置项级别比配置文件高

        error_reporting() :设置对应的错误显示级别

        ini_set('配置文件中的配置项','配置值')

        ini_set('error_reporting',E_ALL);

        ini_set('display_errors',1)

    错误日志设置

      在实际生产环境中,不会直接让错误赤裸裸的展示给用户

      1.不友好

      2.不安全:错误会暴露网站很多信息(路径,文件名)

      所以在生产环境中,一般不显示错误(错误也比较少),但是不可能避免会出现错误(测试的时候不会发现所有的问题),这个时候不希望看到,但是有不希望捕捉打破可以让后台程序员去修改:需要保存到日志文件中,需要在php配置文件中或者代码中(ini_set)设置对应 error_log 配置项:开启日志功能,配置php.ini文件 指定日志文件存放路径

    自定义错误处理

      最简单的错误处理: trigger_errors() 函数,但是该函数不会阻止系统报错

      php系统提供劳务一种用户处理错误的机制:用户自动以错误处理函数,然后将该函数增加操作系统错误处理句柄中,然后系统会在碰到错误之后,使用用户定义的错误函数

      1.如何将用户自定义的函数放到系统中? set_error_handler()

      2.自定义错误处理函数,系统有要求

    // 自定义错误处理机制
    /*
        $errno 是系统提供的错误代码:E_ALL,E_NOTICE...
    */
    function my_error($errno,$errstr,$errfile,$errline){
        //判断 当前会碰到的错误有哪些
        if(!(error_reporting() & $errno)){
            return false;
            // error_reporting 没有参数代表获取当前系统错误处理对应的级别
    // 判断错误类型
        switch($errno){
            case E_ERROR:
            case E_USER_ERROR:
                echo 'Fatal error in file '.$errfile.'on line '.$errline.'<br/>';
                echo 'error info:'.$errstr;
            case E_WARNING:
            case E_USER_WARNING:
                echo 'warning in file '.$errfile.'on line '.$errline.'<br/>';
                echo 'error info:'.$errstr;
            case E_NOTICE:
            case E_USER_ERROR:
                echo 'Notice in file '.$errfile.'on line '.$errline.'<br/>';
                echo 'error info:'.$errstr;
        }
        return true;
    }
    // 2. 注册自定义函数:修改错误处理机制
    //报错
    echo $a;
    // 修改错误机制
    set_error_handler('my_error');
    echo $a;
  • 相关阅读:
    HDOJ1267 下沙的沙子2[DP或卡特兰数]
    HDOJ1711 Number Sequence[KMP模版]
    HDOJ2546 饭卡[DP01背包问题]
    寻找必败态——一类博弈问题的快速解法
    kmp 模版
    网络流题目
    HDOJ1261 字串数[组合+大数]
    传说中效率最高的最大流算法(Dinic) [转]
    ACM博弈论
    HDOJ1061 Rightmost Digit[简单数学题]
  • 原文地址:https://www.cnblogs.com/mysterious-killer/p/9964392.html
Copyright © 2011-2022 走看看