php возвращает ошибку 500, но нет журнала ошибок
У меня проблема, когда у меня есть php-приложение, которое возвращает внутреннюю ошибку сервера (500), но в журнале ошибок ничего не отображается.
Теперь я знаю, что есть ошибка с тем, что я пытаюсь запустить, я знаю, что мне не хватает некоторых файлов, а что нет, но что-то должно отображаться в журнале ошибок apache (в противном случае, как я должен точно знать, что мне не хватает).
Я создал тестовый скрипт с ошибками в той же конфигурации vhost, и эти ошибки отображаются нормально, так что все кажется настроенным так же, как php / apache. Существуют ли определенные ошибки php, которые отображаются в журнале ошибок (php настроен для отображения любого типа уведомления, предупреждения, ошибки, фатальной ошибки и т. Д.)?
Это работает на ubunut 10.04 со стандартными apache и php из репозитория ubuntu с помощью apt-get.
14 ответов
Сканирование ваших исходных файлов, чтобы найти @
,
В настоящее время префикс оператора "@" для контроля ошибок даже отключает отчеты об ошибках для критических ошибок, которые прерывают выполнение скрипта. Среди прочего, это означает, что если вы используете "@" для подавления ошибок определенной функции, и она либо недоступна, либо была напечатана с ошибкой, сценарий сразу же прекратит работу без указания причины.
Если у вас все еще есть 500 ошибок и нет журналов, вы можете попробовать выполнить из командной строки:
php -f file.php
он не будет работать точно так же, как в браузере (с сервера), но если в вашем коде есть синтаксическая ошибка, вы увидите сообщение об ошибке в консоли.
Скопируйте и вставьте следующее в новый .htaccess
файл и поместите его в корневую папку вашего сайта:
php_flag display_errors on
php_flag display_startup_errors on
Ошибки будут отображаться прямо на вашей странице.
Это лучший способ быстрой отладки, но не используйте его долгое время, потому что это может быть брешей в безопасности.
Может быть, что-то отключает вывод ошибок. (Я понимаю, что вы пытаетесь сказать, что другие скрипты правильно выводят свои ошибки в список ошибок?)
Вы можете начать отладку скрипта, определив, где он выходит из скрипта (начните с добавления echo 1; exit;
до первой строки скрипта и проверки, выводит ли браузер 1
а затем переместите эту линию вниз).
В прошлом у меня не было журналов ошибок в двух случаях:
- У пользователя, под которым работал Apache, не было прав на изменение
php_error_log
файл. - Ошибка 500 произошла из-за неправильной конфигурации
.htaccess
Например, неправильно переписать настройки модуля. В этой ситуации ошибки регистрируются в Apacheerror_log
файл.
Для проектов Symfony не забудьте проверить файлы в приложении / журналах проекта
Более подробная информация доступна на этот пост:
Как отладить 500 Ошибка в Symfony 2
Кстати, другие платформы или CMS разделяют такого рода поведение.
Вот еще одна причина, по которой ошибки могут быть не видны:
Я была такая же проблема. В моем случае я скопировал исходный код из производственной среды. Следовательно ENVIRONMENT
переменная, определенная в index.php
был установлен на 'production'
, Это вызвало error_reporting
быть установленным на 0 (без регистрации). Просто установите его 'development'
и вы должны начать видеть сообщения об ошибках в журнале Apache.
Оказалось, что 500 был из-за отсутствия точки с запятой в конфигурации базы данных:-)
Другой случай, который произошел со мной, это то, что я сделал CURL на некоторых своих страницах, и получил внутреннюю ошибку сервера, и в журналах apache ничего не было, даже когда я включил все отчеты об ошибках.
Моя проблема была в том, что в CURL я установил curl_setopt($CR, CURLOPT_FAILONERROR, true);
Который тогда не показал мне мою ошибку, хотя была одна, это произошло потому, что ошибка была на уровне фреймворка, а не на PHP, поэтому она не появилась в журналах.
Если вы
- Получаете периодическую ошибку 500 при отправке форм и
- Вы не можете получить сообщение об ошибке PHP для отображения даже с
display_errors(-1)
Тогда проблема может быть
- В вашей веб-хостинговой компании может быть установлен плагин ModSecurity , который проверяет $_POST на соответствие определенным регулярным выражениям.
Вы можете убедиться в этом по
- Перейдите в /home/youraccount/log/.../.../error.log, в котором должны быть подробные журналы ошибок, которые вы не видите в браузере.
Исправление
- Зайдите в панель управления веб-хостингом, найдите параметр «Дополнительная веб-безопасность?». или аналогичный, и отключите его для этого домена. Вы должны быть в состоянии найти в Google информацию, относящуюся к вашей веб-хостинговой компании.
Убедитесь, что ваши права доступа к файлам верны. Если apache не имеет разрешения на чтение файла, он не может записать в журнал.
Вам необходимо включить журнал ошибок PHP.
Это происходит из-за некоторого случайного сбоя на веб-сервере, когда у вас есть ошибка php, он выдает 500 внутреннюю ошибку (у меня та же проблема).
Если вы посмотрите в журнале ошибок PHP, вы должны найти свое решение.
смотрите здесь в документе о том, как включить его в php.ini
РЕШЕНИЕ. Я боролся с этим, и позже я понял, что работаю над PHP 5.6, поэтому я обновился до PHP 7.0, затем я выпустил комментарии, размещенные git для конфликтующих кодов. Я нашел что-то подобное в своем коде <<<<<<<< Но решил.
Когда это было проблемой, со мной произошло то, что сайт использовал слишком много памяти, поэтому я предполагаю, что он не мог записать в журнал ошибок или отобразить ошибку. Для ясности, это сделал сайт Wordpress. Увеличение лимита памяти на сервере снова показало сайт.