kegi/ php-error-handler
Requires
- php: >=7.0
- filp/whoops: ^2.1
- psr/log: ^1.0
This package is not auto-updated.
Last update: 2024-09-28 20:03:32 UTC
README
PHP7; 面向对象错误处理器。这是一个alpha版本。
#简介
该错误处理器检测PHP错误,将它们转换为异常,并允许您轻松处理。此外,此库可选地记录错误(接受PSR接口)。
安装
使用Composer安装此库
composer require kegi/php-error-handler
调试模式
默认禁用
- 启用调试时,错误会正常显示(您仍然会收到通知)。
- 禁用调试时,所有错误都会被隐藏,您会收到通知,需要您返回错误消息。
严格模式
默认禁用
严格模式会将所有非致命错误转换为致命错误。
复杂的错误处理运行时
如果检测到致命错误,您可以执行复杂的代码。例如,您可以调用错误控制器,根据用户的语言设置从模板生成响应...
如果在处理此致命错误时发生另一个致命错误...(例如,您的应用程序核心的致命错误),您将收到不可恢复错误发生的通知,并且您将能够返回错误消息(例如,返回静态错误HTML页面的内容)。
#如何在项目中实现
-
在项目的开头实例化PhpErrorHandler。
-
您为所需的错误级别(非致命、致命和不可恢复)提供了一个可调用的函数。
-
您的项目未捕获的异常将自然地进入您的致命错误方法。您不再需要以不同的方式处理它们。
#示例
<?php namespace Your\Project\Bootstrap; use KeGi\PhpErrorHandler\PhpErrorHandler; use KeGi\PhpErrorHandler\PhpFatalErrorException; class App { public function __construct() { /*instanciate the error handler*/ (new PhpErrorHandler()) ->setDebug(false) //prod #->setErrorCallback([$this, 'handleError']) //most projects don't need this ->setFatalErrorCallback([$this, 'handleFatalError']) ->setUnrecoverableErrorCallback([$this, 'handleUnrecoverableError']); } public function run() { //run your application... throw new \Exception('Uncaught exception'); //or... trigger_error('Uncaught error', E_USER_ERROR); } public function handleFatalError(PhpFatalErrorException $phpFatalErrorException) { // you can check the php error like this : if($phpFatalErrorException->getCode() === E_PARSE){ //parse error occured... } // you would normally call your router and emit a response return 'A fatal occured occured...'; } public function handleUnrecoverableError() { //you could include a static error page //eg. return include '/static/server-error.html'; return 'A very bad error occured'; } }
#命令行(CLI)
命令行中的错误也将被处理。
- 在发生致命错误的情况下,CLI中的输出缓冲区不会被清除。(没有输出缓冲区)
- 在发生第二级致命错误的情况下,CLI中将不会使用不可恢复回调。
#单元测试 即将推出
#输出缓冲区 这是一个好习惯,在准备好后构建一个响应对象并发出它,大多数PHP路由器都会这样做。如果您的项目直接生成内容(例如,echo、print、var_dump...),这也会被处理。
如果禁用了调试模式,发生致命错误时,已生成的内容将被丢弃,因此只能看到我们的错误响应。
在错误回调中,您可以直接输出您的消息或返回一个字符串。
#参数 ##构造函数 如果您不希望库更改PHP错误设置(ini_set和error_reporting),请将构造函数中的$setErrorDisplay设置为false。
__construct(
bool $debug = false,
bool $strict = false,
$errorCallback = null,
$fatalErrorCallback = null,
$unrecoverableErrorCallback = null,
$errorLogger = null,
bool $setDisplayErrors = true
)
##调试模式 设置/取消设置调试模式。(默认:false)
setDebug(bool $debug)
hasDebug() : bool
##严格模式 设置/取消设置严格模式。启用严格模式后,非致命PHP错误(如E_NOTICE)将被转换为致命错误。(默认:false)
setStrict(bool $strict)
isStrict() : bool
##错误回调 设置/取消设置错误回调。这将调用每个PHP(非致命)错误。大多数项目不需要此功能。
setErrorCallback([mixed $callable])
getErrorCallback() : mixed
##致命错误回调 设置/取消设置致命错误回调。在发生致命错误时将调用此回调。您可以打印或返回输入。
setFatalErrorCallback([mixed $callable])
getFatalErrorCallback() : mixed
##不可恢复错误回调 设置/取消设置致命错误回调。在发生从“fatalErrorCallback”或未定义致命错误回调的致命错误时将调用此回调。您可以打印或返回输入。
setUnrecoverableErrorCallback([mixed $callable])
getUnrecoverableErrorCallback() : mixed
##错误日志器 设置/取消设置错误日志器。ErrorLogger需要实现PSR日志接口。注意:日志在启用或禁用调试模式时都会启用。
setErrorLogger([LoggerInterface $errorLogger])
getErrorLogger() : mixed
##取消 这将取消错误处理器。一旦取消,就不能重新启用它。您仍然可以读取处理器(获取器)的值。尝试编辑处理器(设置器)的值将抛出异常。
cancel()
isCancelled() : bool