Зафиксируйте фатальную ошибку PHP

У меня есть сайт веб-сервиса, который является успокоительным, включил, таким образом, другой websites/ajax сценарий может позвонить в сайт для получения/устанавливания данных. Однако каждый раз, когда сайт веб-сервиса так или иначе возвращает фатальную ошибку PHP, состояние HTTP, которое возвращается, 200 вместо 500. Существует ли способ зафиксировать его так, чтобы каждый раз, когда фатальная ошибка происходит, возвратился 500 вместо 200? Или, если не возможно, как я могу изменить свой клиент для распознавания фатальной ошибки, возвращенной веб-сервисом?

14
задан Jeffrey04 25 February 2010 в 04:11
поделиться

3 ответа

Один из возможных способов - установить ответ по умолчанию на 500, если все выполняется успешно, установить ответ на 200:

http_response_code(500);
render_my_page();
http_response_code(200);
13
ответ дан 1 December 2019 в 06:28
поделиться

Создайте собственный обработчик ошибок ( set_error_handler ) и вызовите заголовок («Служба HTTP / 1.0 500 недоступна»); .

Редактировать:

Согласно первому комментарию к моему ответу, вы не можете отловить истинные фатальные ошибки. Однако PHP по умолчанию устанавливает код ошибки 500 для фатальных ошибок, если буферизация вывода отключена и ошибки не отображаются на экране.

<?php
        $x = y();
?>

Приведенный выше код вернет код ошибки 500, если на экран ничего не было отправлено.

Так что, если вы хотите, чтобы этот вид ошибки устанавливал правильный код, сделайте свою буферизацию:

<?php
        $buffer = 'blah';
        $x = y();  // will trigger 500 error
        echo $buffer;
?>
3
ответ дан 1 December 2019 в 06:28
поделиться

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

-5
ответ дан 1 December 2019 в 06:28
поделиться
Другие вопросы по тегам:

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