ragnar_ok
@ragnar_ok

Как выполнить редирект на страницу 500.php?

Как выполнить редирект на страницу 500.php, чтобы сработало правило .htaccess ErrorDocument 500 /500.php?

Код ниже работает без подключения header:
<?php
ini_set('display_errors', 0);
throw new Error('Error!');

Но как только я запрашиваю header, то выводит стэк-трейс (либо "При выполнении скрипта возникла ошибка. Включить расширенный вывод ошибок можно в файле настроек .settings.php", если debug отключен).
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");

Содержимое exception_handling файла .settings.php:
'exception_handling' =>
  array (
    'value' =>
    array (
      'debug' => false,
      'handled_errors_types' => 4437,
      'exception_errors_types' => 4437,
      'ignore_silence' => false,
      'assertion_throws_exception' => true,
      'assertion_error_type' => 256,
      'log' => NULL,
    ),
    'readonly' => false,
  ),
  • Вопрос задан
  • 270 просмотров
Решения вопроса 1
ragnar_ok
@ragnar_ok Автор вопроса
С товарищем обнаружили, что в Bitrix\Main\Diag\ExceptionHandler вызывается set_exception_handler(function () {}).

Отталкиваясь от ExceptionHandler в init.php указал следующее:
if (!Bitrix\Main\Config\Configuration::getValue('exception_handling')['debug']) { // если 'exception_handling' => ['value' => ['debug' => false]]
    set_exception_handler(function ($exception) {
        (new Bitrix\Main\Diag\ExceptionHandler())->writeToLog($exception, Bitrix\Main\Diag\ExceptionHandlerLog::UNCAUGHT_EXCEPTION); // логируем
        LocalRedirect('/500.php');
        exit;
    });
}

Таким образом, при возникновении внутренней ошибки PHP в случае, если debug отключен, то происходит редирект на страницу /500.php. И не пришлось расширять класс.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы