Страница с ошибкой 500 возвращается как пустая страница вместо отчета об ошибке


Всякий раз, когда я создаю ошибку (например, изменение

if (!file_exists($mageFilename)) в файле index.php в if (!fejfeA_frege(jskfnjs)fdsf)) он должен отображать отчет об ошибке Magento следующим образом:

enter image description here

Но вместо этого он показывает пустую страницу. Состояние сети 500, но где-то в моей установке что-то идет не так, и она не показывает мне страницу отчета об ошибке.

Моя цель - настроить внешний интерфейс отчета об ошибке, но я, очевидно, не могу этого сделать, когда я не удается отобразить отчет об ошибке.

ОБНОВЛЕНИЕ
Он больше не показывает пустую страницу, но теперь он показывает белую страницу с простым черным текстом, после размещения этого фрагмента в файле index.php:

ini_set('error_reporting', E_ERROR);
register_shutdown_function("fatal_handler");
function fatal_handler() {
    $error = error_get_last();
    echo("<pre>");
    print_r($error);
}

И это приводит к этой ошибке (я поместил "x" в файл bootstrap.php, чтобы создать ошибку):

Array
(
    [type] => 4
    [message] => syntax error, unexpected end of file
    [file] => /[DOMAIN]/public_html/app/bootstrap.php
    [line] => 34
)
Author: Maarten Wolfsen, 2016-12-19

1 answers

Проблема здесь в том, как ошибки работают в PHP. PHP знает различные типы ошибок:

  • предупреждения : они регистрируются или отображаются, в зависимости от настроек, но сценарий продолжает выполняться. Существуют различные уровни (уведомления, предупреждения об устаревании, строгие уведомления, предупреждения). Для них можно настроить пользовательские обработчики ошибок.
  • неустранимые ошибки: неустранимые ошибки позволяют сценарию немедленно остановиться. Это включает в себя ошибки синтаксического анализа (синтаксические ошибки). Обычай обработчики ошибок не применяются, но функции завершения работы все еще выполняются.
  • исключения: исключения были введены с PHP 5 в качестве новой языковой функции. Они могут быть перехвачены и обработаны с помощью try { } catch { } Неперехваченные исключения приводят к фатальной ошибке

Теперь, что делает Magento?

  • пользовательский обработчик ошибок записывает предупреждения в system.log и в режиме разработчика превращает их в исключения.
  • исключения регистрируются в exception.log, и "Произошло отображается страница "ошибка обработки вашего запроса". Эта страница может быть настроена и тематизирована в каталоге errors Magento.
  • для фатальных ошибок Magento ничего не может сделать. Здесь вы получаете ужасную белую страницу или, если ошибка возникает во время отрисовки шаблона, половину отрисованной страницы. Ведение журнала ошибок полностью зависит от веб-сервера (типичное расположение: /var/log/apache2/error.log)

К сожалению, вызов несуществующей функции является фатальной ошибкой.

Хорошая новость заключается в том, что в PHP 7 будет все меньше и меньше неустранимых фатальных ошибок, так как ошибки теперь также могут быть пойманы как исключения. Но это сработает только в том случае, если Magento изменит catch (Exception) на catch (Throwable). Дополнительная информация: http://php.net/manual/en/language.errors.php7.php

 1
Author: Fabian Schmengler, 2016-12-19 21:14:52