Как отключить буферизацию вывода в nginx для приложения PHP

У нас есть код, похожий на этот:

<?php ob_implicit_flush(true); ob_end_flush(); foreach ($arrayOfStrings as $string) { echo time_expensive_function($string); } ?> 

В Apache это отправляет каждое эхо в браузер по мере его выхода. Однако в nginx / FastCGI это не работает из-за того, что nginx работает (по умолчанию).

Можно ли сделать эту работу на nginx / FastCGI, и если да, то как?

Related of "Как отключить буферизацию вывода в nginx для приложения PHP"

Ни один из вышеперечисленных решений не работал для меня.

Первый php должен правильно очистить все:

 @ob_end_flush(); @flush(); 

Затем я нашел два рабочих решения:

1) Конфигурация через Nginx:

 fastcgi_buffering off; 

2) Через HTTP-заголовок в php-коде

 header('X-Accel-Buffering: no'); 

Простое решение:

 fastcgi_keep_conn on; # < solution proxy_buffering off; gzip off; 

Я не хотел отключать gzip для всего сервера или целого каталога, всего лишь для нескольких скриптов, в нескольких конкретных случаях.

Все, что вам нужно, это прежде чем что-либо повторится:

 header('Content-Encoding: none;'); 

Затем выполните флеш как обычно:

 ob_end_flush(); flush(); 

Кажется, что Nginx забирает кодировку, отключенную и не gzip.

Добавьте функцию flush () в ваш цикл:

 foreach ($arrayOfStrings as $string) { echo time_expensive_function($string); flush(); } 

Это может сработать, но не обязательно на каждой итерации (есть какая-то магия!)