Можно ли без лишнего изврата выводить красивую страницу при ошибке PHP?
Проблема в том, что если в скрипте возникло необработанное исключение, то страница пустая, вне зависимости от того, что в апаче или в nginx настроены свои ErrorDocument 500, хотя код возврата при этом выставляется правильный - 500.
Или для этих целей нужно обязательно устанавливать свой обработчик для непойманных исключений, в этом обработчике собирать из пойманного исключения Stack trace, переводить всё это в вид строки, если log_errors установлен в true - то записывать в логи веб-сервера, а если display_errors установлен в true - то выводить и на экран, если display_errors не установлен - то выводить красивую страницу 500? Или как-то это всё можно упростить?
Если обязательно извращаться, то есть какой-нибудь легковесный компонент, выполняющий вышеперечисленное и не тянущий за собой полфреймворка?
Уже нашёл, для апача это `ProxyErrorOverride On`, для nginx `fastcgi_intercept_errors on`
Но возможно ли настроить так, допустим, чтобы страница подменялась только в случае непустого тела ответа, возвращённого со стороны FPM?
Допустим, если скрипт сам формирует страницу с ошибкой - то показывать ту страницу, что сформировал скрипт, а если не формирует ничего и тупо выплёвует только 500 и ничего кроме заголовков - то подменять в таком случае?
у вас аж из ~2к вопросов 98% решения как такое вообще возможно, вы что удаляете те на которые не был дан ответ изза этой цифры, или всё действительно так как есть?
Если у вас единая точка входа, то проще там в try {} catch {} обернуть, и используемым шаблонизатором отрендерить, попутно сохранив информацию об исключении и каких-нибудь дополнительных данных.
На уровне nginx можно решить путем error_page 500 /500.html на уровне server
То что вы написали - обязательно. Зачем какой то компонент, когда логику вы сами описали и она достаточно простая. Однако лучше не ориентироваться на display_errors , а лучше завести константу или переменную отвечающую за вывод лога на экран, а display_errors всегда = 0