错误处理概述
常见的错误类型
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();
示例效果:
