PHP错误处理

Rob*_*oer 5 php

提前谢谢你们所有人.

我目前正在调整/改进我为我公司从头开始编写的MVC框架.它相对较新,所以肯定是不完整的.我需要将错误处理合并到框架中(一切都应该有访问错误处理),它应该能够处理不同类型和级别的错误(用户错误和框架错误).我的问题是这样做的最佳方法和最佳机制是什么?我知道PHP 5的异常处理和PEAR的不同错误机制,但我从来没有使用过它们.我需要一些高效且易于使用的东西.

创建自己的错误处理或使用已经制作的东西会更好吗?当然欢迎任何建议,提示,问题.我最终会认为以某种方式注册错误处理程序与PHP的甜蜜,所以我只需要抛出错误,然后决定如何处理它以及是否继续.

编辑:对不起,我应该提供更多有关我想记录的错误类型的详细信息.我希望记录2种主要类型的错误:用户和框架.

对于用户错误,我的意思是坏网址(404),非法访问受限制的页面等等.我知道我可以重新路由到主页或只是脱口而出一个JavaScript对话框,但我希望能够真正处理这些错误并在它们变得明显时添加更多用户错误.

通过框架错误,我的意思是无法连接到数据库,有人在事故中删除了数据库表或以某种方式删除了文件等.

此外,我将负责开发和实时服务器处理.

Pet*_*ley 5

我最终会认为以某种方式注册错误处理程序与PHP的甜蜜,所以我只需要抛出错误,然后决定如何处理它以及是否继续.

您可以使用set_error_handler()set_exception_handler()完成此操作.

没有"一种正确的方法"来进行错误处理,但这里有一些需要考虑的事情.

  • trigger_error()类似于抛出新的Exception,因为它们都会立即从当前执行中逃脱,只有trigger_error()不可捕获.
  • 您希望在开发环境中处理错误(在屏幕上显示?)而不是在生产环境中(记录和通过电子邮件发送?)
  • 您可以使用上述函数将错误实质上"转换"为异常,反之亦然
  • 并非所有错误类型都可以使用自定义错误处理程序处理


Emi*_*l H 5

以下是我通常做的一些事情:

  • 使用全局配置设置或标志在开发和生产之间切换.
  • 当你有一个选择时,不要使用php错误:首选你自己的错误handeling的例外.如果您使用的库不使用异常,请检测错误并抛出您自己的异常.
  • 使用顶级异常捕获器以易于阅读的方式显示异常.如果您策略性地放置此try-catch-block,则不必注册全局异常处理程序.
  • 永远发展 error_handeling(E_ALL | E_STRICT)
  • 使用set_error_handler()和暂停执行来捕获PHP警告和通知.这样可以提前消除很多错误,结果非常可靠.
  • 为了避免错误,全局错误处理代码应该非常轻量级.处理全局错误处理程序时,总是存在递归的风险.
  • 如果系统处于生产模式,请不要显示任何详细信息:记录错误,并生成用户可以参考的唯一标识符,如果他们要提交错误或报告错误.