Когда я делаю перенаправление, никакие ошибки не показывают. Я использую codeigniter платформу и существует
error_reporting(E_ALL);
ini_set('display_errors', 1);
в моем index.php файле. Когда что-то прерывает мой код (e.g.some 'неопределенный индекс' ошибка), и я делаю перенаправление к другой странице - ошибка не показывает. Как избежать, чтобы это - повредило перенаправление и показало ошибки?
функция перенаправления является просто простым заголовком:
header('Location: ' . $uri);
Я предполагаю, что это - что-то соединенное с буферами вывода. Я попытался включить буфер (в index.php) использующий ob_start (), но ничего не происходит.
Спасибо.
Я использую подход, который заключается в использовании пользовательского обработчика ошибок, который выбрасывает исключения при любой ошибке; это гарантирует, что я ничего не упущу во время разработки. Выброс исключения приводит к немедленному прерыванию кода, что позволяет избежать перенаправления. Для производственных сайтов я отключаю эту функцию (а также отключаю 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 избавляет меня от многих проблем в дальнейшем, но решать вам.
В файле application / config / config.php вам необходимо установить уровень сообщения об ошибках для обнаружения ошибок php.
Когда эта опция включена, все ошибки php должны регистрироваться в папке system / logs.
Поскольку функция перенаправления использует перенаправление заголовка, в браузер не отправляется контент (даже ошибки), иначе перенаправление перестанет работать.
Редактировать: Насколько я понимаю, вы хотите сделать одно из трех:
Вариант 1 Отображать ошибку и вообще не делать перенаправления. В этом случае просто удалите функцию перенаправления из обработчика ошибок.
Вариант 2 Отображать ошибку, но через некоторое время перенаправлять. Если это тот случай, когда вы хотите выполнить другой тип перенаправления заголовка:
header("refresh:5;url=/somewhere/else");
Через 5 секунд браузер будет перенаправлен куда-нибудь / в другое место.
Вариант 3 Условно выполните перенаправление (если в разработке отображается ошибка, если не в разработке, не отображать ошибку).
Для этого добавьте в обработчик ошибок Code Igniter условный оператор, чтобы проверить, находитесь ли вы в режиме разработки, или проверьте свой IP-адрес и затем выполните перенаправление в зависимости от этого.
Вы хотите этим заниматься? Или это больше похоже на перенаправление только в том случае, если не было ошибки php? Если да, то откуда вы вызываете функцию перенаправления?