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

示例效果:


相关推荐
njmanong7 小时前
2026年海外代理IP实测:青果网络,bright data,iproyal,ipdodo,kookeey,oxylabs
网络·tcp/ip·php
云游云记7 小时前
ThinkPHP 队列扩展 (topthink/think-queue) 使用笔记
php·thinkphp·think-queue
GodGump8 小时前
从割草图到CSP压缩:大图计算的“减肥术”与“快照术”
服务器·开发语言·php
CS创新实验室8 小时前
《计算机网络》深入学:拥塞控制
开发语言·计算机网络·php
云游云记8 小时前
基于 FastAdmin+ThinkPHP 的二维码防伪系统
php·防伪溯源
东风微鸣8 小时前
家庭网络如何获取到公网IPv6
linux·服务器·php
天空属于哈夫克39 小时前
企微第三方 RPA API:异常处理全链路设计与实操
开发语言·数据库·php
JaguarJack9 小时前
用 PHP 玩转图片:缩放、裁剪、水印、滤镜一网打尽
后端·php·服务端
山东布谷网络科技9 小时前
海外1v1视频社交APP开发难点与核心功能全解析
开发语言·数据库·mysql·ios·php·音视频·软件需求