PHP 基础案例教程之 05-错误处理及调试

错误处理概述

常见的错误类型

PHP 的基本错误类型:

名称 描述
语法错误 程序代码不符合语法规则而发生的错误,会阻止 PHP 脚本的执行
运行错误 程序运行时出现的错误
逻辑错误 编写程序时实现思路出现错误,不会阻止 PHP 脚本的执行,也不会显示具体的错误信息
环境错误 PHP 开发环境配置问题引发的错误

常见的错误级别

PHP 中的错误分为多种类型,每种错误类型都对应不同的错误级别。

错误级别通常用常量来表示,每个错误级别对应的值都是一个整型数据,错误级别常量用于表示当前的错误等级。

PHP 的基本错误级别:

名称 描述
E_ERROR 1 运行时的致命错误,会导致 PHP 脚本停止运行
E_WARNING 2 运行时警告,仅给出提示信息,PHP 脚本不会停止运行
E_PARSE 4 编译时语法解析错误,程序无法执行
E_NOTICE 8 运行时通知,表示 PHP 脚本可能会表现为错误的情况
E_STRICT 2048 严格语法检查,确保代码具有互用性和向前兼容性
E_ALL 32767 表示所有的错误和警告信息 PHP 5.4 之前不包含 E_STRICT
E_USER_ERROR 256 类似 E_ERROR,由用户使用 trigger_error 触发的错误
E_USER_WARNING 512 类似 E_WARNING,由用户使用 trigger_error 触发的错误
E_USER_NOTICE 1024 类似 E_NOTICE,由用户使用 trigger_error 触发的错误

错误处理方式

显示错误报告

当 PHP 脚本发生错误时,默认情况下,PHP 程序会报告错误发生的原因,并将错误信息显示到页面中。

在实际开发中,有时候需要控制是否显示错误报告,以及报告哪些级别的错误,可以通过修改 PHP 配置文件或使用错误报告函数进行控制。

通过修改 PHP 配置文件(php.ini)可以控制错误报告的显示和关闭。

PHP 配置中控制错误报告的基本配置项:

名称 描述
error_reporting 设置错误报告的级别 E_ALL & ~E_NOTICE 表示显示除了 E_NOTICE 级别之外的所有的错误
display_errors 设置是否显示错误报告,可选 On/Off 一般情况下,在开发模式中将该配置项设置为 On,在生产模式中将该配置项设置为 Off

PHP 提供的 error_reporting 函数和 init_set 函数也可以控制错误报告的显示和关闭。


示例:显示错误报告

入口页面(index.php):

PHP 复制代码
<?php
// 显示错误报告
ini_set('display_errors', 1);

// 显示所有级别的错误报告
error_reporting(E_ALL);
echo $info;

// 显示除E_WARNING之外的错误报告
error_reporting(E_ALL & ~E_WARNING);
echo $info;

示例效果:


记录错误日志

在生产环境中,一般不会将错误报告直接显示出来。

在 PHP 中,可以通过 PHP 配置文件配置日志记录,或使用错误日志记录函数来记录错误日志。

通过修改 PHP 配置文件(php.ini)可以记录错误日志。

PHP 配置中记录错误日志的基本配置项:

名称 描述
log_error 设置是否记录日志,可选 On/Off
error_log 指定错误报告日志文件的路径

PHP 提供的 error_log 函数也可以用于记录错误日志。


示例:记录错误日志

入口页面(index.php):

PHP 复制代码
<?php
error_log('error message', 3, '/Users/duozai/Desktop/php.log');

示例效果:


手动触发错误

在 PHP 中,开发者可以根据不同的需求手动触发错误。

手动触发错误的基本用法:

PHP 复制代码
trigger_error(错误信息, [, E_USER_XXX错误级别]);

示例:手动触发错误

入口页面(index.php):

PHP 复制代码
<?php
function divide($num1, $num2) {
    if ($num2 == 0) {
        trigger_error("除数不能为0");
        return false;
    }
    return $num1 / $num2;
}

echo divide(100, 0);

示例效果:


自定义错误处理函数

在 PHP 中,除了将错误报告记录到日志文件,还可以自定义错误处理函数,自行处理错误。

自定义错误处理的基本用法:

PHP 复制代码
function 错误处理函数(错误级别, 错误信息) {
	// ...
}

set_error_handler(错误处理函数, 错误级别);

示例:自定义错误处理函数

入口页面(index.php):

PHP 复制代码
<?php
function customError($errno, $errstr) {
    echo "<b>Error:</b> [$errno] $errstr";
}

set_error_handler('customError');

echo $student;

示例效果:


Xdebug 程序调试工具

获取和安装 Xdebug

Xdebug 是一个开源的 PHP 程序调试工具,使用该工具可以追踪代码出错的具体位置,根据错误信息调试程序,提高开发效率。

Xdebug 文档:https://xdebug.org/

在 IntelliJ IDEA 中,可以快速安装 Xdebug。

Xdebug 安装完成后,需要重启 PHP 相关服务后生效。

使用 Xdebug

Xdebug 会将错误信息变成彩色表格形式,并且将错误定位到具体的函数。


示例:Xdebug

入口页面(index.php):

PHP 复制代码
<?php
function getFile() {
    require 'outfile.php';
}
getFile();

示例效果:


相关推荐
两个人的幸福online2 小时前
php开发者 需要 协程吗
android·开发语言·php
Qlittleboy5 小时前
thinkphp5如何在控制登陆权限的时候,在cookie里添加token参数
php
IP搭子来一个5 小时前
代理IP是什么?有什么用?快速了解与使用指南
网络协议·tcp/ip·php
cq林志炫5 小时前
php 限流思路
redis·php·限流
无限码农7 小时前
2.1 网络编程 异步网络库zvnet
服务器·网络·php
小尔¥8 小时前
LNMP环境部署
运维·数据库·nginx·php
CRMEB10 小时前
电商项目中订单流程可以使用哪些设计模式?如何开发?
java·设计模式·gitee·开源·php·crmeb
代龙涛11 小时前
wordpress块主题之创建主题
php·wordpress
2401_8735878211 小时前
Linux——高级IO
服务器·数据库·php
蜡台12 小时前
VSCode 配置PHP开发环境
ide·vscode·php·debug·launch.json