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

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

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

Ответ 1

Проверьте настройки 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');

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

Включение отображения ошибок из кода 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

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

Ответ 5

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

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

но

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

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

Ответ 6

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

display_errors

или

error_reporting

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

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

display_errors = on;

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

Ответ 7

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

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