php возвращает ошибку 500, но нет журнала ошибок

У меня проблема, когда у меня есть php-приложение, которое возвращает внутреннюю ошибку сервера (500), но в журнале ошибок ничего не отображается.

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

Я создал тестовый скрипт с ошибками в той же конфигурации vhost, и эти ошибки отображаются нормально, так что все кажется настроенным так же, как php / apache. Существуют ли определенные ошибки php, которые отображаются в журнале ошибок (php настроен для отображения любого типа уведомления, предупреждения, ошибки, фатальной ошибки и т. Д.)?

Это работает на ubunut 10.04 со стандартными apache и php из репозитория ubuntu с помощью apt-get.

14 ответов

Решение

Сканирование ваших исходных файлов, чтобы найти @,

С сайта документации php

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

Если у вас все еще есть 500 ошибок и нет журналов, вы можете попробовать выполнить из командной строки:

php -f file.php

он не будет работать точно так же, как в браузере (с сервера), но если в вашем коде есть синтаксическая ошибка, вы увидите сообщение об ошибке в консоли.

Скопируйте и вставьте следующее в новый .htaccess файл и поместите его в корневую папку вашего сайта:

php_flag  display_errors                  on
php_flag  display_startup_errors          on

Ошибки будут отображаться прямо на вашей странице.

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

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

Вы можете начать отладку скрипта, определив, где он выходит из скрипта (начните с добавления echo 1; exit; до первой строки скрипта и проверки, выводит ли браузер 1 а затем переместите эту линию вниз).

В прошлом у меня не было журналов ошибок в двух случаях:

  1. У пользователя, под которым работал Apache, не было прав на изменение php_error_log файл.
  2. Ошибка 500 произошла из-за неправильной конфигурации .htaccessНапример, неправильно переписать настройки модуля. В этой ситуации ошибки регистрируются в Apache error_log файл.

Для проектов Symfony не забудьте проверить файлы в приложении / журналах проекта

Более подробная информация доступна на этот пост:
Как отладить 500 Ошибка в Symfony 2

Кстати, другие платформы или CMS разделяют такого рода поведение.

Вот еще одна причина, по которой ошибки могут быть не видны:

Я была такая же проблема. В моем случае я скопировал исходный код из производственной среды. Следовательно ENVIRONMENT переменная, определенная в index.php был установлен на 'production', Это вызвало error_reporting быть установленным на 0 (без регистрации). Просто установите его 'development' и вы должны начать видеть сообщения об ошибках в журнале Apache.

Оказалось, что 500 был из-за отсутствия точки с запятой в конфигурации базы данных:-)

Другой случай, который произошел со мной, это то, что я сделал CURL на некоторых своих страницах, и получил внутреннюю ошибку сервера, и в журналах apache ничего не было, даже когда я включил все отчеты об ошибках.

Моя проблема была в том, что в CURL я установил curl_setopt($CR, CURLOPT_FAILONERROR, true);

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

Если вы

  • Получаете периодическую ошибку 500 при отправке форм и
  • Вы не можете получить сообщение об ошибке PHP для отображения даже сdisplay_errors(-1)

Тогда проблема может быть

  • В вашей веб-хостинговой компании может быть установлен плагин ModSecurity , который проверяет $_POST на соответствие определенным регулярным выражениям.

Вы можете убедиться в этом по

  • Перейдите в /home/youraccount/log/.../.../error.log, в котором должны быть подробные журналы ошибок, которые вы не видите в браузере.

Исправление

  • Зайдите в панель управления веб-хостингом, найдите параметр «Дополнительная веб-безопасность?». или аналогичный, и отключите его для этого домена. Вы должны быть в состоянии найти в Google информацию, относящуюся к вашей веб-хостинговой компании.

Убедитесь, что ваши права доступа к файлам верны. Если apache не имеет разрешения на чтение файла, он не может записать в журнал.

Вам необходимо включить журнал ошибок PHP.

Это происходит из-за некоторого случайного сбоя на веб-сервере, когда у вас есть ошибка php, он выдает 500 внутреннюю ошибку (у меня та же проблема).

Если вы посмотрите в журнале ошибок PHP, вы должны найти свое решение.

смотрите здесь в документе о том, как включить его в php.ini

РЕШЕНИЕ. Я боролся с этим, и позже я понял, что работаю над PHP 5.6, поэтому я обновился до PHP 7.0, затем я выпустил комментарии, размещенные git для конфликтующих кодов. Я нашел что-то подобное в своем коде <<<<<<<< Но решил.

Когда это было проблемой, со мной произошло то, что сайт использовал слишком много памяти, поэтому я предполагаю, что он не мог записать в журнал ошибок или отобразить ошибку. Для ясности, это сделал сайт Wordpress. Увеличение лимита памяти на сервере снова показало сайт.

Проверьте журнал ошибок внутри:

/usr/local/apps/apache/logs
Другие вопросы по тегам