简体   繁体   中英

PHP error wrapper?

I don't know if the term I'm using is right, but what I'm looking for is something similar to what you get with zend server. Take a look at this .

It looks like on an error, it dumps the request along with a stack trace and function parameters as well as some other info. It lets you view it in a nice interface. I know this wouldn't be hard to make myself as you can always do error callbacks, but if something like this exists (for free) I'd prefer to use it instead of reinventing the wheel.

I don't don't of any tool that will do that automatically for you ; but it is not hard to develop, I think... Still, I admit, it will take you some time :-(

Just to throw in a few notes, the best solution that comes to my mind to log the errors is :

  • register your own error handler with set_error_handler
  • code the function, so that it logs errors + GET/POST data
    • maybe that could/would/should be done in some kind of database, or structured file (an SQLite Database, maybe : light, fast, easy to use, doesn't depend on an external DB server, ...) , and not just plain files ; would be easier to deal with later on.
  • develop the "reporting" application...
    • That's the thing that will take some time, though, as you said...


Using the example that's given on the manual page, something like this would probably do : first, declare your error handling function :

function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    $str = '';
    switch ($errno) {
        case E_USER_ERROR:
            $str .= "<b>My ERROR</b> [$errno] $errstr<br />\n";
            $str .= "  Fatal error on line $errline in file $errfile";
            $str .= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
            break;
        case E_USER_WARNING:
            $str .= "<b>My WARNING</b> [$errno] $errstr<br />\n";
            break;
        case E_USER_NOTICE:
            $str .= "<b>My NOTICE</b> [$errno] $errstr<br />\n";
            break;
        default:
            $str .= "Unknown error type: [$errno] $errstr<br />\n";
            break;
    }
    $str .= print_r($_GET, true);

    $str .= "\n";
    file_put_contents(dirname(__FILE__) . '/log.txt', $str, FILE_APPEND);

    /* Don't execute PHP internal error handler */
    return true;
}

It gets informations of the error, prepares some specific error messages that depend on the error type, and put all that and a dump of $_GET to a file.
(Of course, your webserver must be able to create / write to that file)


Then, you register that handler :

$old_error_handler = set_error_handler("myErrorHandler");


And, finally, just to test, you trigger some errors :

trigger_error("test of E_USER_ERROR", E_USER_ERROR);
trigger_error("test of E_USER_WARNING", E_USER_WARNING);
trigger_error("test of E_USER_NOTICE", E_USER_NOTICE);


Now, provided you call the page with something like this : http://tests/temp/temp.php?a=10&test=glop&hello=world ; you will get an error log containing this :

$ cat log.txt
<b>My ERROR</b> [256] test of E_USER_ERROR<br />
  Fatal error on line 34 in file /home/squale/developpement/tests/temp/temp.php, PHP 5.3.0RC4 (Linux)<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

<b>My WARNING</b> [512] test of E_USER_WARNING<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

<b>My NOTICE</b> [1024] test of E_USER_NOTICE<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

In this case, it is quite an ugly mess... But you probably see the point ; now, up to you to build upon this to get precisely what you want ;-)


Of course, now, you also have to develop the reporting interface (user-friendly, fast, usable, and all that...) ; this will probably be the longest part to put in place :-(

And, unfortunatly, I do not know any tool that could help you...
(Maybe, if you start developping something, it could be released as open source ? That would probably prove useful to others ;-) I might be interested for some projects, and I am sure I'm not the one ;-) )

Still, have fun !

I do not know of any free tools to parse and display PHP error logs.

I have written logging functions for several projects using set_error_handler() and set_exception_handler() .

My handler classes basically do a print_r() of _GET, _POST, _SERVER, _COOKIE, _SESSION, etc and email/SMS me. Works fine most of the time. And I like getting the quick error notifications. (so I can quickly fix it).

You have highlighted a gap in the community tools for PHP. Someone needs to start a project that to log errors with a nice UI for parsing / displaying the logs. Hmm...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM