Я хотел бы иметь возможность отказаться от частично отрендеренной страницы и показать страницу ошибки в PHP.
Я уже знаю о set_error_handler () , но может отлавливать только определенные типы ошибок .Я хотел бы знать, как показать страницу с ошибкой, когда возникает тип ошибки, который не может быть перехвачен set_error_handler () .
К сожалению, кажется, что следующий код, когдаработать с PHP 5.3.2 на Apache 2.2, не делает то, что я ожидал:
<?php
// Start the output buffer
ob_start();
// Output something into the buffer.
// I only want this to be displayed if I call one of the
// ob_flush functions or echo the buffer myself later.
echo "yep";
// Call a function I know not to exist in order to raise
// an error which cannot be trapped by set_error_handler()
// and would, if display_errors was On, output "Fatal
// error: Call to undefined function fwee()..."
function_which_does_not_exist();
// This will never be executed.
$out = ob_get_clean();
Вывод скрипта:
yep
Принимая во внимание, чтоожидать, что он ничего не выводит (или выводит информацию об ошибке и только информацию об ошибке, если display_errors () включен).
Я подтвердил с помощью LiveHTTPHeaders, что PHP 5.3.2 действительно отправляет 500 ошибку браузеру, когда display_errors выключен(и 200, когда он включен) с использованием версии apache, поставляемой MacPorts, но он только плюет на 200 с при использовании PHP 5.3.1 на XAMPP.
Я попытался установить ErrorDocument 500 "test" в конфигурации apache(подтверждено, что он работает так же, как и для 404), но PHP никогда не показывает пользовательскую ошибку, даже когда все содержимое скрипта просто header('HTTP/1.1 500 Internal Server Error');
Я не уверен, что еще нужно сделать, чтобы сделатьсуЕсли частично визуализированная страница заменена простой ошибкой.
Я также могу подтвердить, что это происходит в среде Yii.Если я отредактирую представление для страницы "about" в демо-версии блога, добавив строку, которая будет читать <?php echo function_which_does_not_exist() ?>
, я получу частично визуализированную страницу.