Ошибка php return 500, но не журнал ошибок
У меня возникла проблема, когда у меня есть приложение php, которое возвращает внутреннюю ошибку сервера (500), однако ничего не отображается в журнале ошибок.
Теперь я знаю, что есть ошибка с тем, что я пытаюсь запустить, я знаю, что у меня отсутствуют некоторые файлы, а что нет, но что-то должно отображаться в журнале ошибок apache (иначе как я должен точно знать, чего я не вижу).
Я создал тест script - это ошибки в той же конфигурации vhost, и эти ошибки отображаются хорошо, поэтому все кажется настроенным правильно, насколько php/apache. Существуют ли определенные ошибки php, которые появляются в журнале ошибок (php настроен для отображения любого типа уведомления, предупреждения, ошибки, фатальной ошибки и т.д.)?
Это работает на ubunut 10.04 со стандартными apache и php из репозитория ubuntu с apt-get.
Ответы
Ответ 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, который сделал это. Увеличение лимита памяти на сервере снова показало сайт.