PHP: How to log fatal errors?
There is a way to cope with your task and actually you CAN set a custom error handler on FATAL errors.
You can do it this way:
ini_set('error_reporting', E_ERROR);
register_shutdown_function("fatal_handler");
function fatal_handler() {
$error = error_get_last();
//Do whatever you want with this error, for example:
YourDBApplicationLayer::writeFatal($error);
}
It is not possible to handle fatal errors using a custom error handler.
The best solution is simply enabling error logging (e.g. to syslog) in your php.ini and then using a tool like logcheck/logsentry to receive regular emails about unusual syslog entries.
Instead of syslog PHP can also log errors to a file - simply have a look at the error logging options of php.ini.
log_errors = On
error_log = syslog
error_log = /path/to/some/folder/phperrors.log
Obviously you only want to use one of the error_log
lines.
Now in PHP7 it is possible to catch fatal errors :
try {
ggggg(); // <---- make a fatal error
} catch(Throwable $e) {
var_dump($e);
}