Во время разработки у меня в браузере появляются пустые страницы всякий раз, когда я создаю фатальную ошибку в PHP с опечаткой или просто из-за моего плохого программирования;). Мне очень неприятно просматривать необработанный файл журнала ошибок nginx, чтобы увидеть фатальные ошибки и найти номера строк, где они находятся. Кажется, я не могу найти, как заставить nginx отображать фатальные ошибки PHP в браузере. Вот соответствующая часть моей конфигурации nginx:
location @fpm {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_NAME index.php;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param PATH_INFO $path_info;
}
Вот пример ошибки, которая появляется в моем журнале ошибок, а затем приводит к пустой странице браузера:
2014/01/04 14:53:52 [error] 20082#0: *403 FastCGI sent in stderr:
"PHP message: PHP Fatal error: Cannot redeclare class ClassName in FilePath on line 356"
while reading response header from upstream, client: 192.168.1.10,
server: servername, request: "GET URLPATH HTTP/1.1",
upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "host",
referrer: "referer"
Вот моя информация о PHP:
Вот моя конфигурация PHP-FPM:
И мой пул PHP-FPM conf:
И мой PHP-FPM php.ini:
Я был бы рад, если бы кто-нибудь мог пролить свет на то, что я могу сделать, чтобы эти ошибки проявились!
В конфигурации пула PHP-FPM раскомментируйте
строка 463 php_flag[display_errors] = off
и измените его на
php_flag[display_errors] = on
и не забудьте перезапустить php-fpm
Я подумал, что нашей настройки display_errors было недостаточно для отображения ошибок с помощью nginx.
Последней уловкой для решения этой проблемы было отключение fastcgi_intercept_errors:
fastcgi_intercept_errors off;
Обычно это включено по умолчанию, например, в fastcgi_params.