Как сделать код состояния HTTP набора PHP к 500 автоматически в случае какого-либо состояния ошибки? (включая тех, которые не могут быть обработаны пользователем),

Я выполняю Apache 2.2.15 с PHP 5.3.2, 'display_errors' отключенный, 'display_startup_errors' отключенный, 'log_errors' включил.

При моей установке (таким образом, я считаю это нормой), PHP прерывается на фатальных ошибках, который хорош, и устанавливает код состояния HTTP на 500. Фатальные ошибки включают E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR и, вероятно, E_RECOVERABLE_ERROR (не может инициировать его самостоятельно, так не может легко проверить то, что происходит). Я думаю, что это - хорошая идея, что это действительно устанавливает код на 500, потому что я думаю, что это - правильный поступок - очевидно, если Ваш сценарий содержит синтаксические ошибки и/или не удается сделать то, что, как предполагается, делает во времени выполнения, это - ошибка сервера, если мы рассматриваем часть PHP сервера.

Теперь, вот важная часть:

Так или иначе я теперь установил XDebug на дефектах записи лучше, но я вижу, что теперь, неважно, ошибка, даже при том, что сценарий прерывается как прежде на фатальных ошибках, код состояния HTTP, всегда 200. Это повреждает мой клиент, который 'говорит' с Apache/PHP через HTTP :|

Кроме того, установка display_errors к На/1, не делает PHP больше кодом состояния HTTP набора к 500 и показывает точно то же поведение как с XDebug выше.

Я очень завишу от надежного поведения кода состояния здесь, и это все приводит меня полагать, что это - некоторая счастливая случайность или случайный как погода.. или я пропускаю что-то?

ОБНОВЛЕНИЕ

Существует сообщение в блоге который oulines проблема: http://talideon.com/weblog/2008/02/php-errors.cfm

С моей стороны я отключил XDebug, видя, поскольку это - то, что вызывает плохое поведение во-первых. Я только использовал его для стека, прослеживающего так или иначе, и теперь используйте пользовательский обработчик ошибок для этого вместо этого. Кроме того, связанная статья с 2008, по-видимому, PHP действительно устанавливает код состояния HTTP на 500 автоматически в эти дни. Это делает, таким образом, здесь. Без XDebug, конечно.

1
задан amn 19 June 2010 в 11:28
поделиться

1 ответ

Я предполагаю, что вы используете собственный обработчик ошибок для выдачи 500.

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

Обратите внимание, что расширенное отображение ошибок в xdebug не работает, если вы определяете собственный обработчик ошибок с помощью register_error_handler (). Это потому, что xdebug внутренне использует тот же механизм. Если в ваших сценариях используется пользовательский обработчик ошибок, вы все равно можете использовать функцию xdebug_get_function_stack () для вывода трассировки стека в пользовательский обработчик ошибок.

Однако для производственного использования вы все равно не собираетесь активировать XDebug, не так ли?

Что касается того, почему при активации display_errors () выводится 200, я не понимаю . Можете ли вы опубликовать свою пользовательскую функцию обработчика ошибок, чтобы посмотреть?

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

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