caseycs/php-error-handler

Universal error, exception and cachable fatal errors handler

dev-master 2015-03-06 20:46 UTC

This package is not auto-updated.

Last update: 2024-04-22 13:32:11 UTC


README

Common error handling with callbacks. Provides custom error message with request url, referer, session and other environment info for every error.

Example:

SHUTDOWN Call to undefined function unexisted_function() in /Users/ikondrashov/github/php-error-handler/test/uncatchable.php:6
URL: localhost:3000/uncatchable.php
HTTP_REFERER: http://localhost:3000/uncatchable.php
SESSION: Array
(
    [a] => 5
)
POST: Array
(
    [b] => 10
)
COOKIES: Array
(
    [c] => 15
)
uniqid: 52496cfee1616

Installation via Composer

{
    "require": {
        "caseycs/php-error-handler": "dev-master"
    },
}

Usage

Basic usage:

$ErrorHandler = new ErrorHandler\ErrorHandler;
$ErrorHandler->register();

Advanced usage:

if ($_SERVER['APPLICATION_ENV'] !== 'development') {
    $ErrorHandler = new ErrorHandler\ErrorHandler;
    $ErrorHandler->register();
    $ErrorHandler->addExceptionCallback(function () {header ('HTTP/1.0 500 Internal Server Error', true, 500);});
}

Going deeper

First of all - make sure, that you have error_log value defined - both for cli and fpm (or apache) environments. Use phpinfo() for web and php -i | grep error_log for cli. Make sure, that specified file is writeable for user, which executes your cli scripts (for example using crontab) and apache/fpm.

This is very important!

Also, make sure that display_errors equals false - this package is only for production usage.

What's our goals?

For cli we are going to write all errors to common cli error log /var/log/php-errors-cli.php and to stderr of running script - for example from crontab * * * * * php script.php >> script.log 2>&1.

For web we are going to write all errors to common web error log /var/log/php-errors-fpm.php including environment - url, referer, get, post, cookies, session etc. Also we want to write environment for uncatchable errors - which are handled by register_shutdown_function.

Drawbacks

Fatal errors, which are not handled by set_error_handler and are caught only by register_shutdown_function appear in error log twice - first time as native php error, and second one - as our custom message with environment info. Anybody knowns how to fix this?