2011-08-22 2 views
40

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

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

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

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

+0

Это с окнами и IIS, правильно? – Neal

+0

извините, должен был включить: ubuntu 10.04 – ryanzec

+0

Apache и PHP как из стандартного репозитория ubuntu с apt-get – ryanzec

ответ

45

Проверьте исходные файлы, чтобы найти @.

From php documentation site

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

+18

Это было так. CodeIgniter, по-видимому, любит использовать их в этом фреймворке, из-за чего я не люблю CodeIgniter. – ryanzec

+6

это точно. CodeIgniter 'return @mysql_connect (...' маскировал тот факт, что мне не удалось установить модуль mysql php на новый сервер, глупо мне, потраченные часы, извлеченные уроки. – rymo

+0

О, человек, я надеюсь, что это все. CI-приложение, а также ... –

0

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

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

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

see here in the doc of how to enable it in the php.ini

+0

Я думаю, вы неправильно поняли вопрос .. его журнал ошибок PHP включен, но эта конкретная ошибка внутреннего сервера не была журнал. У меня есть эта проблема сейчас в Laravel для ошибки, возникшей при попытке получить доступ к закрытому методу. Другие 500 ошибок регистрируются, но не то, что ... не могу понять, почему :( – geoidesic

6

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

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

5

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

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

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

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

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

1

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

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

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

2

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

Подробнее доступных на этом посту:
How to debug 500 Error in Symfony 2

Btw, другие структуры или CMS разделяют этот вид поведения ,

0

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

+1

Apache должен иметь корневые разрешения независимо от ОС и поэтому должен иметь возможность писать в любой файл, неважно, что это собственный файл журнала. –

+0

У Apache никогда не должно быть права на root. Это будет серьезное нарушение безопасности. –

1

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

php_flag display_errors     on 
php_flag display_startup_errors   on 

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

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

Смежные вопросы