Это именно та проблема, которая у меня была вчера, и я нашел решение следующим образом:
1) Прежде всего, вам нужно отлавливать фатальные ошибки PHP, тип ошибки E_ERROR. Когда эта ошибка возникает, сценарий сохраняет ошибку и прекращает выполнение. Вы можете получить сохраненную ошибку, вызвав функцию error_get_last ().
2) до завершения сценария всегда вызывается функция обратного вызова register_shutdown_function (). поэтому вам нужно зарегистрировать обработчик ошибок с помощью этой функции, чтобы сделать то, что вы хотите, в этом случае вернуть заголовок 500 и настроенную страницу внутренней ошибки (необязательно).
function my_error_handler()
{
$last_error = error_get_last();
if ($last_error && $last_error['type']==E_ERROR)
{
header("HTTP/1.1 500 Internal Server Error");
echo '...';//html for 500 page
}
}
register_shutdown_function('my_error_handler');
Примечание: если вы хотите перехватить пользовательский тип ошибки, который начинается с E_USER *, вы можете использовать функцию set_error_handler () для регистрации обработчика ошибок и запуска ошибки с помощью функции trigger_error, однако этот обработчик ошибок не может обрабатывать тип ошибки E_ERROR. см. объяснение на php.net о обработчике ошибок