Странная внутренняя ошибка сервера 500 (firebug, php, display_errors, ajax)

StackOverflow https://stackoverflow.com/questions/1184001

Вопрос

На одной странице я выполняю несколько вызовов AJAX.Все вызовы успешно возвращают ответы, но последний (не связанный с другими вызовами ajax) возвращает внутреннюю ошибку сервера 500 в виде кода ответа (как сообщает firebug).Однако, несмотря на код ошибки, правильное содержимое возвращается из этого вызова AJAX.

К моему удивлению, когда я устанавливаю параметр display_errors в php.ini как Вкл., ошибка исчезает, а ответ отображается на странице.У меня есть запись ошибки настройки в файл, но ошибка, соответствующая вышеупомянутой внутренней ошибке сервера, не регистрируется.

Кстати, я использую Apache, jQuery, PHP5, APC (если это уместно).

Нет правильного решения

Другие советы

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

Чтобы проверить:в строке, которая выполняется последней, повторите что-нибудь.Если это эхо не отображается, значит, вы знаете, что ваш PHP-скрипт где-то останавливается.На этом этапе это всего лишь вопрос отладки и трассировки.

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

У меня была точно такая же проблема, оказавшаяся скрытой Фатальной ошибкой.Включите display_errors, найдите ошибку, устраните ошибку, отключите display_errors (вероятно, лучше всего оставить display_errors включенным для разработки и выключенным в производстве).

Интерпретатор PHP просто выходит из строя во время этого одного запроса.Я знаю одну потенциальную причину, которая может привести к сбою PHP:

Из-за некоторых ошибок в GCC 4.3 в PHP, скомпилированном с помощью этой версии компилятора, нарушена реализация исключений.В некоторых нетривиальных случаях выдача скриптом исключения приводит к segfault и выполнение скрипта прекращается.Тезис был подтвержден командой PHP пару месяцев назад.

Чтобы проверить, происходит ли это с вами, вы можете просто проверить, где происходит сбой при выполнении скрипта, и если это происходит сразу после создания исключения, вы дома.Проверка может быть произведена путем размещения die() продвигайтесь дальше по сценарию и смотрите, что получится.Другой способ заключается в использовании declare(ticks=1) и зарегистрируйте функцию tick, которая сохраняет последнюю запись из debug_backtrace() добавляйте в файл каждую галочку, чтобы вы получали отчет о том, как выполняется скрипт.

У меня была несколько похожая проблема, и проблема заключалась в том, что скрипт выбрасывал исключения, а блока catch не было, поэтому исключение всплывало на поверхность и возникала неустранимая ошибка "неперехваченное исключение".Это стандартное поведение php, но на одном конкретном сервере вы также получили бы код ответа 500 internal server error вместо 200 OK.Удаление исключений и замена их операторами die() устранили проблему на этом сервере (мы могли бы это сделать, потому что это был простой скрипт, который на самом деле не выигрывал от исключений в первую очередь)

Проблема часто устраняется одним из следующих способов.Проверьте разрешения скриптов, права и принадлежность.Если возвращается после вызова ajax, проверьте, нет ли нигде неустранимой ошибки.Проверьте, не перекодировали ли вы случайно файл в Unix в режиме ASCII.

Более подробную информацию можно прочитать по адресу http://www.larshemel.com/forum/500_internal_server_error

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top