Подтвердить что ты не робот

Ошибка php return 500, но не журнал ошибок

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

php_flag  display_errors                  on
php_flag  display_startup_errors          on

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

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

Ответ 4

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

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

Ответ 5

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

Подробнее об этом сообщении:
Отладка 500 ошибок в Symfony 2

Btw, другие фреймворки или CMS используют этот тип поведения.

Ответ 6

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

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

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

Ответ 7

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

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

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

Ответ 8

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

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

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

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

Ответ 9

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

Ответ 10

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

php -f file.php

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

Ответ 11

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