Failing with grace and artistry
1 Jun 2007
One of the problems I’ve always had with PHP error handling is catching the fatal errors. If a php script encounters a fatal error it stops, and the desired error handling code does not get executed.
So the user will (usually) be confronted with a blank screen and, worse still, since the error isn’t logged I don’t know about it and therefore can’t fix it.
It’s a rare and confident user who will report a blank page or other such glitch; people are so used to working with a certain level of pain when using a computer that they just assume it’s unavoidable or that it’s been caused by their own inadequacy in some way.
Anyway, (thank-you PHP London user group) I now have a solution using the register_shutdown_function()
<?
register_shutdown_function('cleanExit');
// ... go and do all sorts of exciting stuff ...
$running = false;
function cleanExit() {
if ($GLOBALS['running'])) {
// script is still running - it's an ERROR
// tell Bronwen about the error
// tell user it's not their fault
}
}
>