PHP FPM возвращает HTTP 500 для всех ошибок PHP

Я запускаю nginx с PHP-FPM. Моя конфигурация nginx для обработки файлов php выглядит так:

location  ~ \.php$ {
            set $php_root /home/me/www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $php_root$fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
        }

Теперь у меня есть простой файл php, например:

<?php
     ech "asd"
     asd""
?>

Да, с явной ошибкой. Когда я пытаюсь получить доступ к файлу php, вместо отслеживания синтаксической ошибки я всегда получаю внутреннюю ошибку сервера HTTP 500. Я пытался использовать error_reporting(-1);, но все равно всегда возвращает HTTP 500. Как заставить PHP печатать точную ошибку вместо возврата общий HTTP 500?


person ErJab    schedule 09.02.2010    source источник
comment
Если бы в файле не было ошибки, вы бы получили правильный код ответа (HTTP 200 OK)?   -  person echo    schedule 09.02.2010
comment
Да, я получаю HTTP 200 OK, если в файле нет ошибки.   -  person ErJab    schedule 09.02.2010
comment
Как правило, лучше регистрировать ошибки, чем отображать их.   -  person umassthrower    schedule 01.07.2012


Ответы (7)


Попробуйте найти следующую строку в вашем php.ini:

 display_errors = Off

тогда сделай это

person Young    schedule 09.02.2010
comment
Благодарю вас! Я использую производственную версию php.ini, в которой display_errors отключен. - person ErJab; 09.02.2010
comment
Я использовал скрипт PHP-Fastcgi, поэтому, когда недавно перешел на php-fpm. Я не заметил, что php.ini изменился на версию FPM. Их версия имеет display_errors = Off, поэтому все мои страницы стали пустыми, когда произошла ошибка! - person Xeoncross; 23.08.2011
comment
не забудьте после этого сбросить php-fpm. (перезагрузка службы sudo php-fpm) - person alioygur; 25.04.2012
comment
Также не забудьте изменить error_level на E_ALL, и если у вас нет php-fpm в качестве службы, перезапустите ее, просто выполните sudo /etc/init.d/php5-fpm restart - person srcspider; 26.03.2013

Чтобы опубликовать более полный ответ, я использовал производственную версию php.ini, в которой display_errors = Off. Вместо того, чтобы включать его глобально, что я сейчас делаю, для файлов, для которых мне нужны отчеты об ошибках, я использую ini_set('display_errors', 'On'); в начале файла.

person ErJab    schedule 15.03.2010
comment
Проблема в том, что, согласно документации, это не сработает, если произойдет Fatal Error. - person srcspider; 26.03.2013
comment
@srcspider Не совсем так? Указываются даже фатальные ошибки. Все, что вам нужно сделать, это просто убедиться, что вы поместили этот ini_set('display_errors', 'On') в самый верх области, которую вы рассматриваете. - person Romeo Sierra; 18.09.2017

Также я столкнулся с проблемой, и я установил display_errors = Off в php.ini, но это не работает. Затем я нашел php[display_errors]=off в php-fpm.conf, и он переопределит значение php.ini, и это работает.

person yaronli    schedule 25.03.2012
comment
php.ini не имеет ничего общего с конфигурациями, если вы используете php-fpm, в этом случае вам нужно будет изменить файл php-fpm.conf. - person Romeo Sierra; 18.09.2017

Ошибки отображения будут влиять только на то, будут ли ошибки выведены на печать или нет.

Если у вас включены ошибки журнала, ошибки по-прежнему будут отсутствовать в журнале, если не отключено отображение, что не является ожидаемым поведением.

Ожидаемое поведение: если журнал включен, там обнаруживаются ошибки. Если дисплей включен, на экране/выводе обнаруживаются ошибки. Если оба включены, ошибки будут обнаружены на обоих.

Текущие версии имеют ошибку, которая лишает этого права.

person Luis Ferro    schedule 22.08.2012
comment
Знаете ли вы запись об ошибке в php.net, которая отслеживает эту ошибку? Можете ли вы дать ссылку на него? - person Sven; 04.10.2012

Для Ubuntu 12.10 в файле php-fpm-pool-config:

php_flag[display_errors] = on

В файле php.ini:

display_errors = On
person user2009092    schedule 24.01.2013

вы можете отобразить ошибки следующим образом: зайдите в php.ini и найдите display_errors, вы должны увидеть display_errors = Off, просто замените Off на On, перезапустите php и снова запустите.

person Bách Nguyễn    schedule 09.04.2019

Если вы устанавливаете из репозитория Remi php72. Это пользователь по умолчанию и группа с apache |

перейдите в свой файл www.conf, он найдет /etc/opt/remi/php72/php-fpm.d/www.conf

и изменить

user=nginx
group=nginx

перед перезапуском php fpm

systemctl restart php72-php-fpm

ЦЕНТОС РЕМИ PHP7.2

person Turan Zamanlı    schedule 13.10.2018