2011-12-19 2 views
6

Иногда у меня будет какой-то плохо сформированный PHP-код, и я получу ошибку 500. Я запускаю Apache 2.2 на ноутбуке Windows 7. В качестве IDE я начал использовать PhpStorm.PHP 5.3 - Устранение неполадок 500 Ошибок - Отладка - Ошибки анализа

Каков наилучший способ поймать эти ошибки и получить информацию о номере линии? Почему ошибки синтаксиса, связанные с ООП, имеют тенденцию бросать 500 ошибок и проблем с функциями, как правило, возвращают обычные ошибки?

Пример синтаксической ошибки: вызов статического метода из класса с одним двоеточием вместо двух двоеточий.

ОБНОВЛЕНИЕ: См. Принятый ответ и все комментарии.

+0

Я не уверен, что вы имеете в виду под «нормальными ошибками»? Если код не удается проанализировать из-за синтаксической ошибки, я бы ожидал, что 500 из веб-сервера с деталями ошибки компиляции в журналах (а не на дисплее пользователю). – David

ответ

12

PHP ответит «500», когда встретит фатальную ошибку, такую ​​как E_PARSE, E_ERROR и неотображаемые исключения. 500 - это код ответа HTTP для «Внутренней ошибки сервера» - во время обработки запроса произошло что-то неустранимое.

В вашем php.ini, на машине для разработки, вы должны установить error_reporting уровень (по крайней мере) E_NOTICE - предпочтительно E_ALL - и убедитесь, что display_errors включен. Это покажет вам сообщение об ошибке в браузере, в том числе для «500» ошибок.

Вы также можете проверить свои журналы ошибок Apache, там будут указаны ошибки, если в php.ini включен log_errors. По умолчанию это будет <apache_ServerRoot>\logs\error.log.

Вы также можете контролировать все это во время выполнения с ini_set() и error_reporting()

+0

Эта статическая ситуация должна быть ошибкой E_PARSE. Было так сложно найти проблему - я думал, что должен быть лучший способ. – BuddyJoe

+0

Включите функцию error_reporting. +1 И часовой пояс. – BuddyJoe

+0

@brunot, если вы не видите сообщения с 'error_reporting', возможно,' display_errors' выключен. Бывают ситуации, когда сообщение об ошибке не будет выводиться, но это действительно так, если что-то пошло не так с PHP внутри, и оно разбилось. Когда это происходит, в журналах Apache обычно появляется сообщение, сообщающее вам, что * это произошло, хотя отладка * почему это произошло, может быть очень сложно. В этой ситуации запуск сценария из командной строки * иногда * помогает получить полезное сообщение об ошибке, но не всегда. – DaveRandom