Вопрос по apache2, php, apache – Для php flush - как отключить gzip для конкретного файла?

8

У меня есть вызов ajax для somefile.php. я хочу, чтобы скрипт php выполнил простую задачу, а затем отправил обратно данные пользователю, и только после этого занял много времени. поэтому мне нужно очистить вывод после первого простого задания. это не работает, вероятно, потому что у меня есть gzip.

Я определенно не хочу отключать gzip для всех vhost, а также не во всех папках, где находится somefile.php. я просто хочу отключить его для этого конкретного файла. это возможно?

РЕДАКТИРОВАТЬ:

это то, что я включил в мой apache conf:

<code><FilesMatch \.php$>
    SetEnv no-gzip 1
</FilesMatch>
</code>

это мой скрипт php:

<code><?php
$sucesss = @apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);

ob_start();

for($i=0;$i<10;$i++)
{
    echo 'printing...';
    ob_flush();
    flush();

    sleep(1);
}
?>
</code>

это не работает. я все еще вижу все выходные вместе через 10 секунд.

Если ваш веб-сервер обрабатывает сжатие gzip, я думаю, вы не сможете отключить его через PHP. noli
Может быть, посмотрите на это:stackoverflow.com/questions/1922934/… noli

Ваш Ответ

3   ответа
1

# exclude certain page requests (e.g. for requesting getMyFile.php?action=getFile&id=3 as non-compressed)
SetEnvIfNoCase Request_URI getMyFile\.php$ no-gzip dont-vary
@ B.Martin Оставь$ выключить регулярное выражение и включить параметр запроса. подобноajax\.php\?a=download.
Как вы можете отключить его только для определенных запросов к одному и тому же файлу? например.:ajax.php?a=list&id=5 - & GT; со сжатиемajax.php?a=download&file=image.png - & GT; без сжатия
7

что сработало для меня, но, к сожалению, кажется, что это не VALID заголовок

<?
header("Content-Encoding: none");
?>
ЗдесьContent-Encoding технические характеристики:w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.5
2

apache_setenv() верно. Смотрите документацию.

http://php.net/manual/en/function.apache-setenv.php#60530

apache_setenv('no-gzip', '1');

Ваша проблема в том, что вы включили выходную буферизацию сob_start(), Прокомментируйте это.

Я узнал, чтоapache_setenv() доступно только с модулем PHP Apache. Он недоступен при использовании FPM. В этом случае вы должны использовать.htaccess выключить GZip. Примером является

https://stackoverflow.com/a/36212238/148844

RewriteRule ^dashboard/index - [E=no-gzip:1]
SetEnvIf REDIRECT_no-gzip 1 no-gzip

- означает NOOP,E означает установить переменную,1 это значение. После перенаправления переменные переименовываются и начинаются сREDIRECT_.

Если выходные данные все еще буферизируются, проверьте, проходите ли вы через прокси или кэш. Посмотрите, как заголовкиVia: 1.1 varnish или жеVia: 1.1 vegur присутствуют. Они также буферизуют ответ.

Похожие вопросы