Не удается получить nginx для очистки буфера с php7-fpm - PullRequest
0 голосов
/ 14 мая 2019

Мне нужен долго работающий (7-8 секунд) php-скрипт для вывода частичных результатов пользователю по мере их обнаружения. Ранее я мог сделать это с более старой версией php-fpm и nginx, выполнив следующие действия:

  1. Использование этих настроек конфигурации в php:
@ini_set('output_buffering', 0);
@ini_set('implicit_flush', 1);
@ini_set('zlib.output_compression', 0);
@ob_end_clean();
set_time_limit(0);
header('X-Accel-Buffering: no');

и запуск ob_implicit_flush(1); flush(); каждый раз, когда мне нужно было выводить частичные результаты.

  1. Использование этих директив для nginx:
 fastcgi_keep_conn on;
 proxy_buffering off;
 gzip off;

Однако при обновлении до PHP 7 и nginx 1.10.3 эти настройки больше не работают.

Я попытался добавить эти директивы в nginx:

 fastcgi_max_temp_file_size 0;
 fastcgi_store off;
 fastcgi_buffering off;

Но, похоже, они тоже ничего не делают. Результаты по-прежнему буферизируются до тех пор, пока php-скрипт не завершит работу, а затем будут отправлены сразу.

Возможно ли то, что я прошу, все еще возможно?

(Я ценю предложения о том, что есть и другие способы отправки частичных результатов, которые не включают отключение буферов, но это не часть моего вопроса).

1 Ответ

1 голос
/ 14 мая 2019

Подумайте, единственный способ сделать это, если вы можете разделить начальный сценарий на несколько сценариев.

Каждый скрипт, который вы затем можете вызвать из внешнего интерфейса с помощью ajax и добавить содержимое в DOM.

PHP-скрипты по большей части синхронизируются. Но, выполняя вызовы ajax (те, которые запускаются асинхронно), вы можете выполнять несколько сценариев php параллельно.

...