mekras/bedoved

易于错误处理

v1.3.0 2014-04-25 05:57 UTC

This package is auto-updated.

Last update: 2024-08-29 04:14:22 UTC


README

Бедовед — библиотека для перехвата и обработки ошибок, в том числе фатальных.

Latest Stable Version License Build Status Coverage Status

允许

  • 捕获和处理致命错误;
  • 将错误转换为基于指定掩码的异常;
  • 在出现错误或异常时发送电子邮件通知;
  • 在出现错误或异常时输出指定文件的文本内容,而不是标准错误信息或异常信息;
  • 输出有关错误的详细调试信息。

使用示例

require 'Bedoved.php';
$bedoved = new Bedoved()
// Включить превращение ошибок в исключительные ситуации
$bedoved->enableErrorConversion();
// Включить перехват исключений, не перехваченных приложением
$bedoved->enableExceptionHandling();
// Включить перехват фатальных ошибок
$bedoved->enableFatalErrorHandling();
// Включить отправку извещений об ошибках по e-mail
$bedoved->setNotifyEmails('admin@example.org');
// При возникновении ошибки показывать этот файл
$bedoved->setMessageFile('/path/to/file.html');

捕获和处理致命错误

PHP没有标准方法来捕获某些类型错误(例如E_PARSE或E_ERROR),但是有一个方法 — 通过注册函数使用 ob_start。在CLI模式下不工作。

通过调用方法 enableFatalErrorHandling 启用Bedoved的致命错误捕获。可以使用方法 setFatalErrorHandler 设置自己的处理器。

<?php
require 'Bedoved.php';
$bedoved = new Bedoved();
$bedoved->enableFatalErrorHandling();
$bedoved->setFatalErrorHandler(
    /**
     * Ваш обработчик ошибок
     *
     * Чтобы вывести что-нибудь в браузер используйте return.
     *
     * @param ErrorException $e       исключение, содержащее информацию об ошибке
     * @param string         $output  фрагмент вывода, где обнаружено сообщение об ошибке
     *
     * @return string  вывод для браузера
     */
    function (ErrorException $e, $output)
    {
        return 'ERROR: ' . $e->getMessage();
    }
);

$x = new Foo;

将错误转换为异常

<?php
require 'Bedoved.php';
$bedoved = new Bedoved();
$bedoved->enableErrorConversion();

try
{
    $x = 1 / 0;
}
catch (ErrorException $e)
{
    echo 'ERROR: ' . $e->getMessage() . PHP_EOL;
}

错误预定义操作

不需要编写自己的错误处理器,可以使用Bedoved中预定义的操作:发送电子邮件通知和显示文件。

$bedoved = new Bedoved();
$bedoved
    ->enableErrorConversion()
    ->enableExceptionHandling()
    ->enableFatalErrorHandling()
    ->setNotifyEmails('admin@example.org')
    ->setMessageFile('/path/to/file.html');

setNotifyEmails 方法允许设置一个电子邮件地址列表(用逗号分隔),当出现错误时,错误信息将发送到这些地址。信息中包含错误文本、错误发生位置、调用栈、请求的URI、请求的主机和用户代理。信息的主题包含网站的域名(来自 $_SERVER['HTTP_HOST'])或由 php_uname('n') 返回的服务器名。

setMessageFile 方法允许设置一个文件,当出现错误时将显示该文件的文本内容。

调试模式

在1.2.0版本中添加了调试模式,在该模式下

  • 不发送电子邮件;
  • 忽略通过 setMessageFile() 设置的输出;
  • 在浏览器中输出有关错误的详细信息。

要启用调试模式,需要将构造函数的第一个参数传递为 true

$bedoved = new Bedoved(true);

注意事项

  • 内置错误处理器总是通过调用函数 error_log 将捕获的错误和异常写入日志。
  • 如果错误发生时HTTP头还未发送,将发送一个500状态码的头。
  • 启用致命错误捕获将禁用错误信息的HTML格式,并添加一个唯一的标记。