Ошибка php return 500, но не журнал ошибок

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

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

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

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

Solutions Collecting From Web of "Ошибка php return 500, но не журнал ошибок"

Сканируйте исходные файлы, чтобы найти @ .

С сайта документации php

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

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

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

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

  1. Пользователь, под которым выполнялся Apache, не имел прав на изменение файла php_error_log .
  2. Ошибка 500 произошла из-за плохой конфигурации .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 нет разрешения на чтение файла, он не может записывать в журнал.