Я использую nginx с PHP-FPM (APC установлен).
Мне нужен PHP flush()
работать. Это возможно?
То, что я пробовал до сих пор:
php.ini
, а также сжатие на выходе.gzip
в конфигурации nginx.fastcgi_*
настройки буферизации и fastcgi_max_temp_file_size
к нулю.Я уверен, что мне что-то не хватает, так как я наткнулся на много сообщений здесь и в других местах, где люди утверждали, что это работает, но мне, похоже, не повезло.
К сожалению, это невозможно с 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;