Как я могу заставить PHP отображать ошибку вместо того, чтобы выдавать мне 500 Internal Server Error [duplicate]

93

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

Я использую его, просто передав файл на другой сервер и запустив его там, чтобы найти ошибку, но это становится слишком утомительным. Есть ли способ исправить это?

  • 3
    Это звучит как проблема Apache, а не проблема PHP. Apache будет выбрасывать 500 каждый раз, когда у него возникают проблемы с конфигурацией (например, неправильный синтаксис в .htaccess). Проверьте журнал ошибок Apache на наличие сообщения об ошибке.
Теги:

7 ответов

144
Лучший ответ

Проверьте настройки error_reporting, display_errors и display_startup_errors в файле php.ini. Они должны быть установлены на E_ALL и "On" соответственно (хотя вы не должны использовать display_errors на рабочем сервере, поэтому отключите это и используйте log_errors вместо этого, если/когда вы его разворачиваете). Вы также можете изменить эти настройки (кроме display_startup_errors) в самом начале вашего script, чтобы установить их во время выполнения (хотя вы не можете поймать все ошибки таким образом):

error_reporting(E_ALL);
ini_set('display_errors', 'On');

После этого перезапустите сервер.

  • 1
    Как отключить display_errors, но при этом PHP отображать 200 или 404 вместо 500?
  • 0
    Не уверен, что это было в 2010 году, но вам не нужно перезагружать сервер (если только не используется кэш кода операции, такой как APC) в 2014 году.
Показать ещё 3 комментария
12

Стоит отметить, что если ваша ошибка связана с .htaccess, например отсутствующим файлом rewrite_module, вы все равно увидите внутреннюю ошибку сервера 500.

  • 3
    Я на самом деле отсутствовал модуль на Apache. Я получил это, посмотрев журнал ошибок (по умолчанию для Ubuntu /var/log/apache2/error.log)
7

Используйте "php -l < имя_файла > " (это "L" ) из командной строки, чтобы вывести синтаксическую ошибку, которая могла бы заставить PHP выкинуть ошибку состояния 500. Он выведет что-то вроде:

Ошибка анализа паролей PHP: синтаксическая ошибка, неожиданный '}' в < имя_файла > в строке 18

  • 1
    Это действительно помогло мне! Хвост моего журнала ошибок ничего не дал, но этот гем работал отлично и отображал мою синтаксическую ошибку и номер строки. Отлаживал файл класса. Спасибо!
2

Попробуйте не идти

MAMP > conf > [your PHP version] > php.ini

но

MAMP > bin > php > [your PHP version] > conf > php.ini

и измените его там, это сработало для меня...

2

Включение отображения ошибок из кода PHP для меня не работает. В моем случае, используя NGINX и PHP-FMP, я отслеживаю файл журнала с помощью grep. Например, я знаю, что имя файла mycode.php вызывает ошибку 500, но не знает, какая строка. С консоли я использую это:

/var/log/php-fpm# cat www-error.log | grep mycode.php

И у меня есть вывод:

[04-Apr-2016 06:58:27] PHP Parse error:  syntax error, unexpected ';' in /var/www/html/system/mycode.php on line 1458

Это помогает мне найти строку, где у меня есть опечатка.

0

Если все остальное не работает, попробуйте переместить (т.е. в bash) все файлы и каталоги "прочь" и добавить их обратно по одному.

Я только выяснил, что мой файл .htaccess ссылался на несуществующий файл .htpasswd. (#silly)

0

Будьте внимательны, если

display_errors

или

error_reporting

активен (не является комментарием) где-то еще в ini файле.

Мой сервер разработки отказался отображать ошибки после обновления до Kubuntu 16.04 - я много раз проверял php.ini... оказалось, что есть diplay_errors = off; около 100 строк ниже моего

display_errors = on;

Так что помните, что последний подсчет!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню