<?php namespace WillySoft; abstract class ErrorHandler { /** * On error or exception erase the output buffer and hand the * error message as an HTML formatted string to the callback * then die */ static function register(callable $callback) { ob_start(); set_error_handler(function($errno, $errstr, $errfile, $errline) use (&$callback) { error_log("Error[$errno]: $errstr in $errfile at line $errline\n"); $errstr = htmlspecialchars($errstr); self::oof($callback, "<b>Error[$errno]:</b> $errstr in <b>$errfile</b> at line <b>$errline</b>"); }); set_exception_handler(function($exception) use (&$callback) { error_log("Uncaught Exception: $exception\n"); self::oof($callback, "<b>Uncaught Exception:</b> {$exception}"); }); } private static function oof(callable $callback, string $error_message) { ob_end_clean(); http_response_code(500); header_remove(); $callback($error_message); die(); } }