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();

示例效果:


相关推荐
两个人的幸福12 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo14 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack14 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户30745969820715 天前
PHP 扩展——从入门到理解
php
鹏仔先生16 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下16 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip16 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
酉鬼女又兒16 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
dog25016 天前
不要再继续优化 TCP
网络协议·tcp/ip·php
Channing Lewis16 天前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel