14

somefile.php への ajax 呼び出しがあります。私は、php スクリプトで単純なタスクを実行し、ユーザーにデータを送り返すだけでなく、非常に時間のかかるタスクを実行したいと考えています。そのため、最初の単純なタスクの後に出力をフラッシュする必要があります。おそらくgzipが有効になっているため、機能しません。

私は間違いなく、すべての仮想ホストで gzip を無効にしたくありません。また、somefile.php があるすべてのフォルダーでも無効にしたくありません。この特定のファイルに対して無効にしたいだけです。それは可能ですか?

編集:

これは、Apache conf に含めたものです。

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

これは私のphpスクリプトです:

<?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);
}
?>

うまくいきません。10 秒後もすべての出力が一緒に表示されます。

4

3 に答える 3

4

apache_setenv()正しい。ドキュメントを参照してください。

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

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

あなたの問題は、で出力バッファリングをオンにしたことですob_start()。それをコメントアウトします。

apache_setenv()これは、PHP Apache モジュールでのみ使用できることを知りました。FPM を使用している場合は使用できません。その場合、.htaccessGZip をオフにするために使用する必要があります。例は

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が存在するかどうかを確認します。それらは応答もバッファリングします。

于 2016-03-21T22:35:03.077 に答える
2

これをhttpd.confに入れます

# 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
于 2012-04-23T16:39:36.427 に答える