Покажите ошибки перед перенаправлением

Когда я делаю перенаправление, никакие ошибки не показывают. Я использую codeigniter платформу и существует

error_reporting(E_ALL);
ini_set('display_errors', 1);

в моем index.php файле. Когда что-то прерывает мой код (e.g.some 'неопределенный индекс' ошибка), и я делаю перенаправление к другой странице - ошибка не показывает. Как избежать, чтобы это - повредило перенаправление и показало ошибки?

функция перенаправления является просто простым заголовком:

header('Location: ' . $uri);

Я предполагаю, что это - что-то соединенное с буферами вывода. Я попытался включить буфер (в index.php) использующий ob_start (), но ничего не происходит.

Спасибо.

1
задан DCrystal 26 July 2010 в 10:46
поделиться

2 ответа

Я использую подход, который заключается в использовании пользовательского обработчика ошибок, который выбрасывает исключения при любой ошибке; это гарантирует, что я ничего не упущу во время разработки. Выброс исключения приводит к немедленному прерыванию кода, что позволяет избежать перенаправления. Для производственных сайтов я отключаю эту функцию (а также отключаю display_errors, конечно). Я включил простой код для этого ниже.

/**
 * Function to throw exceptions on any errors.
 */
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    // Ignore suppressed errors
    if (error_reporting() == 0) { 
        return; 
    }
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}

// Report ALL errors
error_reporting(E_ALL | E_STRICT | E_NOTICE);
// Enable error display
ini_set('display_errors', 1);
// Set the error handler
set_error_handler('exception_error_handler');

Обратите внимание, что это должно быть сделано как можно раньше во время выполнения вашего скрипта, чтобы поймать все ошибки. Обратите также внимание, что вызов error_reporting() может вызвать слишком много ошибок, чтобы вам это понравилось; мы разрабатываем по очень строгим стандартам, и я обнаружил, что отбрасывание исключений даже для ошибок типа E_NOTICE избавляет меня от многих проблем в дальнейшем, но решать вам.

1
ответ дан 2 September 2019 в 22:45
поделиться

В файле application / config / config.php вам необходимо установить уровень сообщения об ошибках для обнаружения ошибок php.

Когда эта опция включена, все ошибки php должны регистрироваться в папке system / logs.

Поскольку функция перенаправления использует перенаправление заголовка, в браузер не отправляется контент (даже ошибки), иначе перенаправление перестанет работать.

Редактировать: Насколько я понимаю, вы хотите сделать одно из трех:

Вариант 1 Отображать ошибку и вообще не делать перенаправления. В этом случае просто удалите функцию перенаправления из обработчика ошибок.

Вариант 2 Отображать ошибку, но через некоторое время перенаправлять. Если это тот случай, когда вы хотите выполнить другой тип перенаправления заголовка:

header("refresh:5;url=/somewhere/else");

Через 5 секунд браузер будет перенаправлен куда-нибудь / в другое место.

Вариант 3 Условно выполните перенаправление (если в разработке отображается ошибка, если не в разработке, не отображать ошибку).

Для этого добавьте в обработчик ошибок Code Igniter условный оператор, чтобы проверить, находитесь ли вы в режиме разработки, или проверьте свой IP-адрес и затем выполните перенаправление в зависимости от этого.

Вы хотите этим заниматься? Или это больше похоже на перенаправление только в том случае, если не было ошибки php? Если да, то откуда вы вызываете функцию перенаправления?

1
ответ дан 2 September 2019 в 22:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: