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

示例效果:


相关推荐
niucloud-admin11 分钟前
PHP V6 单商户常见问题——本地phpstudy部署,访问域名/admin 、域名/wap无法自动跳转对应首页问题
php
隔窗听雨眠2 小时前
MySQL主从延迟根因诊断法
开发语言·php
niucloud-admin3 小时前
PHP V6 单商户常见问题——运行内存太小导致的报错处理
php
nbwenren3 小时前
办公AI实测:Gemini3、GPT-4o、Claude3.5谁更强?
服务器·数据库·php
hopetomorrow4 小时前
学习路之PHP --PHP 常用扩展及作用表
开发语言·学习·php
幽络源小助理5 小时前
影视脚本分镜在线协作系统源码 PHP剧本创作平台
开发语言·php
勤劳的进取家6 小时前
传输层基础
运维·开发语言·学习·php
天疆说6 小时前
Ubuntu 安装微软核心字体
ubuntu·microsoft·php
YaBingSec6 小时前
玄机网络安全靶场:Apache HTTPD 解析漏洞(CVE-2017-15715)WP
java·笔记·安全·web安全·php·apache
chaofan9807 小时前
突破大模型落地瓶颈:Claude 4.7 与 GPT-5.5 长上下文工程实测
数据库·人工智能·python·gpt·自动化·php·api