Это никогда не случалось раньше. Обычно он отображает ошибку, но теперь она просто дает мне 500 внутренних ошибок сервера. Конечно, раньше, когда он отображал ошибку, это были разные серверы. Теперь я на новом сервере (у меня есть полный корень, поэтому, если мне нужно настроить его где-нибудь в php.ini, я могу). Или, может быть, это что-то с Apache?
Я использую его, просто передав файл на другой сервер и запустив его там, чтобы найти ошибку, но это становится слишком утомительным. Есть ли способ исправить это?
Проверьте настройки 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');
После этого перезапустите сервер.
Стоит отметить, что если ваша ошибка связана с .htaccess, например отсутствующим файлом rewrite_module, вы все равно увидите внутреннюю ошибку сервера 500.
Используйте "php -l < имя_файла > " (это "L" ) из командной строки, чтобы вывести синтаксическую ошибку, которая могла бы заставить PHP выкинуть ошибку состояния 500. Он выведет что-то вроде:
Ошибка анализа паролей PHP: синтаксическая ошибка, неожиданный '}' в < имя_файла > в строке 18
Попробуйте не идти
MAMP > conf > [your PHP version] > php.ini
но
MAMP > bin > php > [your PHP version] > conf > php.ini
и измените его там, это сработало для меня...
Включение отображения ошибок из кода 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
Это помогает мне найти строку, где у меня есть опечатка.
Если все остальное не работает, попробуйте переместить (т.е. в bash) все файлы и каталоги "прочь" и добавить их обратно по одному.
Я только выяснил, что мой файл .htaccess ссылался на несуществующий файл .htpasswd. (#silly)
Будьте внимательны, если
display_errors
или
error_reporting
активен (не является комментарием) где-то еще в ini файле.
Мой сервер разработки отказался отображать ошибки после обновления до Kubuntu 16.04 - я много раз проверял php.ini... оказалось, что есть diplay_errors = off; около 100 строк ниже моего
display_errors = on;
Так что помните, что последний подсчет!