Я использую 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 задано значение On / 1, PHP больше не будет устанавливать код состояния HTTP на 500 и будет работать точно так же, как в случае с XDebug выше.
Я очень сильно зависел от поведения надежного кода состояния, и все это наводит меня на мысль, что это какая-то случайность или случайность, подобная погоде ... или я что-то упустил?
UPDATE
В блоге есть сообщение, посвященное проблеме:
http://talideon.com/weblog/2008/02/php-errors.cfm
Со своей стороны, я отключил XDebug, так как именно он в первую очередь вызывает плохое поведение. В любом случае я использовал его только для трассировки стека, а теперь вместо этого использую собственный обработчик ошибок. Кроме того, связанная статья написана в 2008 году. Очевидно, PHP действительно автоматически устанавливает код состояния HTTP на 500 в эти дни. Здесь это так. Без XDebug, конечно.