php:11 错误

错误处理

错误分类

错误代号

错误触发

<?php

    // php 错误处理

    // 处理脚本让浏览器按照指定字符集解析的方法
    header('Content-type:text/html;charset=utf-8');


    $b = 0;

    if($b == 0){
        // 人为触发错误
        trigger_error("除数不为0"); // 默认notice,代码会继续执行
        trigger_error("error,代码不执行", E_USER_ERROR); // 代码不会执行
    }

    echo 2 / 0;

    echo "ok!";

错误显示设置

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

  1. 不友好
  2. 不安全

故在生产环境中,一般不显示错误(错误比较少),因此将错误保存在日志中,需要在php配置文件(php.ini)或代码中进行配置。

  1. 开启日志功能
  2. 指定路径

自定义错误处理

  1. 创建自定义错误函数
  2. 修改系统错误机制

参考代码:

<?php

    // 解决中文乱码问题
    header('Context-type:text/html;charset=utf-8');    

    // 自定义错误处理机制

    // 自定义函数
    /*
        @param1 $errno:系统提供的错误代码,如 E_ALL、E_NOTICE
    */
    function my_error($errno, $errstr, $errfile, $errline){
        // 判断:当前会碰到错误有哪些
        // error_reporting没有参数代表获取当前系统错误处理对应的级别
        if(!(error_reporting() & $errno)){ // 按位与   我们的错误代码如果在系统错误级别里 就继续执行,若没有则返回false
            return false;
        } 

        // 开始判断错误类型
        switch($errno){ // 错误匹配
            case E_ERROR:
            case E_USER_ERROR:
                echo 'fatal error in file' . $errfile . ' on line ' . $errline . '<br/>';
                echo 'error info' . $errstr;
            break;
            case E_WARNING:
            case E_USER_WARNING:
                echo 'warning in file' . $errfile . ' on line ' . $errline . '<br/>';
                echo 'error info' . $errstr;
                break;
            case E_NOTICE:
            case E_USER_NOTICE:
                echo 'notice in file' . $errfile . ' on line ' . $errline . '<br/>';
                echo 'error info' . $errstr;
                break;
        }
        return true;
    }

    echo $a; // 创造一个错误
    // // 报错如下:
    // Notice: Undefined variable: a in C:\Users\lisa\Documents\My\Learn_CodeTych\Vscode\php\ln_19_err_2.php on line 40


    // 修改系统错误机制
    set_error_handler('my_error');

    echo $a;

    // 报错
    
    

复杂的错误自定义模式:当某些影响代码功能的错误发生后,让用户跳转到某个指定页面。

<?php

    // 解决中文乱码问题
    header('Context-type:text/html;charset=utf-8');    

    // 自定义错误处理机制

    // 自定义函数
    /*
        @param1 $errno:系统提供的错误代码,如 E_ALL、E_NOTICE
    */
    function my_error($errno, $errstr, $errfile, $errline){
        // 判断:当前会碰到错误有哪些
        // error_reporting没有参数代表获取当前系统错误处理对应的级别
        if(!(error_reporting() & $errno)){ // 按位与   我们的错误代码如果在系统错误级别里 就继续执行,若没有则返回false
            return false;
        } 

        // 开始判断错误类型
        switch($errno){ // 错误匹配
            case E_ERROR:
            case E_USER_ERROR:
                echo 'fatal error in file' . $errfile . ' on line ' . $errline . '<br/>';
                echo 'error info' . $errstr;
            break;
            case E_WARNING:
            case E_USER_WARNING:
                echo 'warning in file' . $errfile . ' on line ' . $errline . '<br/>';
                echo 'error info' . $errstr;
                break;
            case E_NOTICE:
            case E_USER_NOTICE:
                echo 'notice in file' . $errfile . ' on line ' . $errline . '<br/>';
                echo 'error info' . $errstr;
                // 错误模式,跳转到某个页面
                header('refresh');
                break;
        }
        return true;
    }

    echo $a; // 创造一个错误
    // // 报错如下:
    // Notice: Undefined variable: a in C:\Users\lisa\Documents\My\Learn_CodeTych\Vscode\php\ln_19_err_2.php on line 40


    // 修改系统错误机制
    set_error_handler('my_error');

    echo $a;

    // 报错
    
    
    
发布了191 篇原创文章 · 获赞 1 · 访问量 4662

猜你喜欢

转载自blog.csdn.net/bluebloodye/article/details/104093720