php——33-php.ini 中配置错误消息

版权声明:未经同意,不得随意转载转载 https://blog.csdn.net/lucky541788/article/details/83028768

常见配置

  • 在php.ini中,error_reporting控制输出到用户端的消息种类
  • error_reporting = E_ALL; ——设置向PHP报告发生的错误类型
  • display_errors = Off; ——设置错误是否显示在客户端
  • log_errors = On; ——开启日志记录
  • error_log = “D:\wamp64\logs\php_error.log”; ——错误日志记录文件
配置值

http://php.net/manual/zh/errorfunc.constants.php
除了在php.ini文件中可以调整错误消息的显示级别外,在php代码中也可以自定义消息显示的级别。使用error_reporting函数(动态改变上面error_reporting的值)。

/**
 * 开发过程中,建议全部开启
 * E_ALL
 *
 * 线上过程全部关闭
 * error_reporting(0);
 */

error_reporting(E_ALL & ~E_NOTICE);//显示所有报错信息除了notice
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);//显示所有报错信息,除了notice和warning

error_reporting(E_ALL ^ E_NOTICE);//显示所有报错信息除了notice
echo $t;//notice
echo 2 / 0;//warning
//phpinfo();//在Loaded Configuration File中查看php.ini位置

PHP中的错误处理

  • 在php中,对于错误处理非常的宽松。php系统会尽量让程序运行下去,除非遇到致命错误。
  • 直接打印一个未赋值变量$t时候,系统报出一个Notice,未定义变量。
  • 做除以零的运算时,系统报出一个Warning,提示有除以零这样的警告,程序依然在运行。
  • 当实例化一个不存在的类的时候,发生致命错误,程序终止运行。
自定义处理
  • set_error_handler()函数向系统声明错误处理函数。
  • 使用trigger_error()函数,可以触发一个error。
  • 例如trigger_error(“你输入的年龄必须大于0”,E_USER_ERROR),触发自己的错误信息。
/**
 * 自定义错误处理函数
 *
 * @param $errno    int     错误类型
 * @param $errmsg   string  错误信息
 * @param $errfile  string  产生错误的文件
 * @param $errline  int     错误所在行
 */
function error_handler($errno, $errmsg, $errfile, $errline)
{
    switch ($errno) {
        case E_USER_ERROR:
            echo '自定义错误处理类型: [' . $errno . '], 错误消息: ' . $errmsg . '<br>';
            echo '产生的错误的文件: [' . $errfile . '], 所在行是: ' . $errline . '<br>';
            break;
        case E_WARNING:
            echo '自定义的警告: [' . $errno . '], 错误消息: ' . $errmsg . '<br>';
            echo '产生的错误的文件: [' . $errfile . '], 所在行是: ' . $errline . '<br>';
            break;
        case E_NOTICE:
            echo '自定义NOTICE: [' . $errno . '], 错误消息: ' . $errmsg . '<br>';
            echo '产生的错误的文件: [' . $errfile . '], 所在行是: ' . $errline . '<br>';
            break;
        default:
            echo '未处理错误类型: [' . $errno . '], 错误消息: ' . $errmsg . '<br>';
            echo '产生的错误的文件: [' . $errfile . '], 所在行是: ' . $errline . '<br>';
            break;
    }
}

set_error_handler('error_handler');

/**
 * 自定义NOTICE: [8], 错误消息: Undefined variable: t
 * 产生的错误的文件: [E:\desk\shan\QD-practice\php\cc.php], 所在行是: 39
 */
echo $t;

/**
 * 自定义的警告: [2], 错误消息: Division by zero
 * 产生的错误的文件: [E:\desk\shan\QD-practice\php\cc.php], 所在行是: 45
 */
echo 2 / 0;

/**
 * 自定义错误处理类型: [256], 错误消息: 输入的年龄必须大于0
 * 产生的错误的文件: [E:\desk\shan\QD-practice\php\cc.php], 所在行是: 54
 */
$age = -100;
if ($age < 0) {
    //使用trigger_error()函数,可以触发一个error。
    trigger_error('输入的年龄必须大于0', E_USER_ERROR);
}

猜你喜欢

转载自blog.csdn.net/lucky541788/article/details/83028768