Error Handling in PHP
Ian Littman / @iansltx
joind.in/13615 || ian.im/err
Good for 204, bad for 500
What we'll cover
- Handling fatals sanely
- Handling exceptions exceptionally
- Handling non-fatals silently
- Knowing when your site errors
- Using other people's work for 1-4
disclaimer
don't copy-paste this code
So far so good
Some boilerplate
a wild error appeared!
blank response...no handling
add a shutdown handler
notes
- HHVM can actually catch these errors
- Needs a configuration value set
- Error code is 2^24
- Your handler MUST set a proper response code
- Default is 200...
- ...even when it would otherwise be a 500
What about exceptions?
catch all the exceptions
#0 /home/yanntxin/public_html/err/index.php(13): {closure}(Array, Array, Array) #1 {main}
What about notices?
Hey dude...wait, what???
send the notices somewhere
gotchas
- Unless your error handler returns false, PHP's won't be called after yours is done
- If you handle a fatal, it's your job to call die()...
- ...and set the HTTP response code
irl (In real life)
- You'll probably use a class for this sort of thing
- String function names and [$this, 'method'] syntax work for callback registering
- Your definition of what a fatal error is can be a constant expression in PHP 5.6+
- You'll probably handle all errors with one handler
irl (In real life)
- You'll want to do non-trivial logging
- Your logger should be fine when your system fatals
- Use a PSR-3 logger (e.g. Monolog)
- Set alerts from your app, e.g. text + email on a 500
irl (In real life)
- You may want to use something that's already been built
that's it!
Questions?
Ian Littman / @iansltx
joind.in/13615 || ian.im/err
Code at ian.im/errgh
Error Handling in PHP
By Ian Littman
Error Handling in PHP
- 2,745