php возвращает 500 ошибок, но без журнала ошибок
У меня возникла проблема, когда у меня есть php-приложение, которое возвращает внутреннюю ошибку сервера (500), однако в журнале ошибок ничего не отображается.
Теперь я знаю, что есть ошибки в том, что я пытаюсь запустить, я знаю, что у меня отсутствуют некоторые файлы, а что нет, но что-то должно отображаться в журнале ошибок apache (иначе как я должен точно знать, чего мне не хватает).
Я создал тестовый скрипт с ошибками в той же конфигурации vhost, и эти ошибки показывают все в порядке, так что все, кажется, настроено правильно, насколько это возможно для php/apache. Существуют ли определенные ошибки php, которые отображаются в журнале ошибок (php настроен для отображения любого типа уведомлений, предупреждений, ошибок, фатальных ошибок и т. Д.)?
Это работает на ubunut 10.04 со стандартным apache и php из репозитория ubuntu с apt-get.
9 answers
Сканируйте исходные файлы, чтобы найти @
.
В настоящее время префикс оператора управления ошибками "@" даже отключает отчеты об ошибках для критических ошибок, которые завершат сценарий исполнение. Помимо прочего, это означает, что если вы используете "@" для подавления ошибок определенной функции и либо она недоступна или был напечатан неправильно, сценарий умрет прямо там, без указания причины.
Возможно, что-то отключает вывод ошибок. (Я понимаю, что вы пытаетесь сказать, что другие скрипты правильно выводят свои ошибки в журнал ошибок?)
Вы можете начать отладку сценария, определив, где он выходит из сценария (начните с добавления echo 1; exit;
в первую строку сценария и проверки, выводит ли браузер 1
, а затем переместите эту строку вниз).
В прошлом у меня не было журналов ошибок в двух случаях:
- Пользователь, под которым работал Apache, не имел прав на изменение файла
php_error_log
. - Ошибка 500 произошла из-за неправильной конфигурации
.htaccess
, например, неправильных настроек модуля перезаписи. В этой ситуации ошибки регистрируются в файле Apacheerror_log
.
Скопируйте и вставьте следующее в новый файл .htaccess
и поместите его в корневую папку вашего веб-сайта:
php_flag display_errors on
php_flag display_startup_errors on
Ошибки будут отображаться непосредственно на вашей странице.
Это лучший способ быстрой отладки, но не используйте его в течение длительного времени , потому что это может быть нарушением безопасности.
Для проектов Symfony обязательно проверьте файлы в приложении/журналах проекта
Более подробная информация доступна в этом посте :
Как отладить ошибку 500 в Symfony 2
Кстати, другие фреймворки или CMS разделяют такое поведение.
Вот еще одна причина, по которой ошибки могут быть не видны:
У меня была та же проблема. В моем случае я скопировал исходный код из производственной среды. Следовательно, переменная ENVIRONMENT
, определенная в index.php
, была установлена в 'production'
. Это привело к тому, что error_reporting
было установлено в 0 (без регистрации). Просто установите для него значение 'development'
, и вы должны начать видеть сообщения об ошибках в журнале apache.
Оказалось, что 500 было вызвано отсутствием точки с запятой в конфигурации базы данных:-)
Другой случай, который произошел со мной, заключается в том, что я свернул некоторые из своих страниц и получил внутреннюю ошибку сервера, и в журналах apache ничего не было, даже когда я включил все отчеты об ошибках.
Моя проблема заключалась в том, что в ЗАВИТКЕ, который я установил
curl_setopt($CR, CURLOPT_FAILONERROR, true);
Который затем не показал мне мою ошибку, хотя она и была, это произошло потому, что ошибка была на уровне фреймворка, а не PHP, поэтому она не появилась в журналах.
Вам необходимо включить журнал ошибок PHP.
Это связано с каким-то случайным сбоем на веб-сервере, когда у вас ошибка php, он выдает 500 внутренних ошибок (у меня такая же проблема).
Если вы посмотрите в журнале ошибок PHP, вы должны найти свое решение.
Убедитесь, что у вас правильные права доступа к файлам. Если у apache нет разрешения на чтение файла, то он не может записывать данные в журнал.