HoRain云--PHP错误处理全攻略

🎬 HoRain 云小助手:个人主页
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
目录

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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)