🎬 HoRain 云小助手个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

一、PHP 错误类型(必须分清)

二、常见错误示例

三、错误报告设置(核心 ⭐)

✅ 显示错误(开发环境)

✅ 关闭错误显示(生产环境 ⚠️)

四、error_reporting 等级

五、自定义错误处理函数

六、异常处理(✅ 推荐)

✅ 抛出异常

✅ 捕获异常

✅ finally

七、Error 与 Exception 区别(重点 ⚠️)

八、自定义异常类

九、错误日志(生产环境必备)

十、常见坑 ⚠️

十一、最佳实践 ✅(直接照抄)

十二、一句话总结


PHP 的错误处理直接关系到系统的安全性、稳定性和可维护性。下面我按「错误类型 → 处理方式 → 实战配置 → 安全建议」系统讲解 ✅


一、PHP 错误类型(必须分清)

类型

说明

示例

Notice

提示(不中断)

使用未定义变量

Warning

警告(不中断)

include 文件不存在

Error

致命错误(中断)

调用未定义函数

Parse Error

语法错误

少写分号

Exception

异常(可捕获)

try/catch


二、常见错误示例

echo $a;              // Notice
include "no.php";    // Warning
foo();               // Fatal error

三、错误报告设置(核心 ⭐)

✅ 显示错误(开发环境)

error_reporting(E_ALL);
ini_set('display_errors', 1);

✅ 关闭错误显示(生产环境 ⚠️)

ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', 'php_error.log');

四、error_reporting 等级

常量

说明

E_ALL

所有错误

E_ERROR

致命错误

E_WARNING

警告

E_NOTICE

提示

E_PARSE

语法错误

E_STRICT

编码规范

✅ 推荐:

error_reporting(E_ALL & ~E_NOTICE);

五、自定义错误处理函数

function myErrorHandler($errno, $errstr, $errfile, $errline) {
    echo "错误 [$errno]:$errstr<br>";
    echo "文件:$errfile 第 $errline 行";
}

set_error_handler("myErrorHandler");

⚠️ 不能捕获 Fatal Error


六、异常处理(✅ 推荐)

✅ 抛出异常

throw new Exception("出错了");

✅ 捕获异常

try {
    throw new Exception("错误");
} catch (Exception $e) {
    echo $e->getMessage();
}

✅ finally

try {
    // 业务代码
} catch (Exception $e) {
    // 处理错误
} finally {
    // 一定执行
}

七、Error 与 Exception 区别(重点 ⚠️)

对比

Error

Exception

是否可捕获

❌(部分可)

是否中断

面向对象

推荐程度

✅✅✅

PHP 7+ 可捕获部分 Error

try {
    nonFunction();
} catch (Error $e) {
    echo $e->getMessage();
}

八、自定义异常类

class MyException extends Exception {}

throw new MyException("自定义错误");

九、错误日志(生产环境必备)

error_log("数据库连接失败");

✅ 写入指定文件:

error_log("error", 3, "error.log");

十、常见坑 ⚠️

说明

生产环境显示错误

❌ 严重安全隐患

忽略 Notice

❌ 隐藏 Bug

不用 try/catch

❌ 不可控

不记录日志

❌ 无法排查


十一、最佳实践 ✅(直接照抄)

// 开发环境
error_reporting(E_ALL);
ini_set('display_errors', 1);

// 生产环境
error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', __DIR__ . '/logs/php_error.log');

十二、一句话总结

开发:打开错误;生产:关闭显示,记录日志;业务:用异常。


如果你愿意,我可以继续帮你:

封装统一错误处理类

Laravel / ThinkPHP 错误处理机制

API 错误返回 JSON 规范

PHP 错误 vs Java / Python 对比

你现在用的是 原生 PHP / 框架 / API 接口?我可以按场景讲 😊

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐