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;
  • 相关阅读:
    Centos 7 zabbix 实战应用
    Centos7 Zabbix添加主机、图形、触发器
    Centos7 Zabbix监控部署
    Centos7 Ntp 时间服务器
    Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut
    Kickstart 安装centos7
    Centos7与Centos6的区别
    Linux 150命令之 文件和目录操作命令 chattr lsattr find
    Linux 发展史与vm安装linux centos 6.9
    Linux介绍
  • 原文地址:https://www.cnblogs.com/mysterious-killer/p/9964392.html
Copyright © 2011-2022 走看看