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