Назад | Перейти на главную страницу

Как включить PHP flush () с nginx + PHP-FPM?

Я использую nginx с PHP-FPM (APC установлен).

Мне нужен PHP flush() работать. Это возможно?

То, что я пробовал до сих пор:

Я уверен, что мне что-то не хватает, так как я наткнулся на много сообщений здесь и в других местах, где люди утверждали, что это работает, но мне, похоже, не повезло.

К сожалению, это невозможно с nginx. Реализация fastcgi в nginx требует наличия буфера, даже если вы установите для директивы буферизации значение 0, это просто приведет к буферизации на диск вместо памяти.

Вам нужно будет придумать какую-нибудь альтернативную систему, такую ​​как очередь, в которой вы можете опросить статус. (подумайте, например, ala gearman)

Редактировать: Поскольку это возможно: http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_buffering

Я хотел того же, и оказалось, что это возможно. Все, что вам нужно, это это, прежде чем что-либо будет эхом:

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

Затем для промывки вы выполняете промывку как обычно:

ob_end_flush();
flush();

Nginx, похоже, улавливает отключенную кодировку и не архивирует.

Это возможно. Поместите это в раздел сервера конфигурационного файла вашего сайта:

gzip off;
proxy_buffering off;
fastcgi_keep_conn on;
fastcgi_max_temp_file_size 0;
fastcgi_buffering off;

Поместите это в php.ini

output_buffering = Off
implicit_flush = On

Быть осторожен. Отключение этих буферов может иметь серьезные последствия для производительности.

Это возможно, посмотрите на это ответ.

Сам пробовал, работает.


Обновите конфигурацию сервера nginx {}:

fastcgi_keep_conn on; # < solution

proxy_buffering off;
gzip off;