3

サーバー送信イベントストリームをPHPで作成していますが、次のエラーが発生します。

「バッファzlib出力圧縮のフラッシュに失敗しました」

これは、gzip圧縮された出力をフラッシュしようとしたためだと思います。

これが私のPHPコードです:

header ("Content-Type: text/event-stream\n\n");
header ("Cache-Control: no-cache");

echo "data: {$json}";
echo "\n\n";

ob_flush(); // ERROR HERE
flush();

私の質問は、これを機能させるための最良の方法は何ですか?理想的にはapacheでgzipを無効にすることなく-PHPでオフにすることができますか?

私はこれを試しましたが、うまくいきませんでした:

if(ini_get('zlib.output_compression')){
    ini_set('zlib.output_compression', 'Off');
}
4

1 に答える 1

2

ob_outputハンドラーに沿ってzlib出力圧縮を使用することはできません。zlib.output_compressionのphpドキュメントを参照してください。複数回記載されています。

PHPで出力圧縮を有効にする最も簡単な方法は、これを行うことです。

ini_set("zlib.output_compression", 1);
ini_set("zlib.output_compression_level", 9);

そして、すべてのob_*のものを失います。クライアントが次のようなヘッダーを持つページをリクエストすると、次のようになります。

Accept-Encoding: gzip, deflate

zlibは応答本文をgzipで圧縮し、応答でこれを設定します。

Content-Encoding: gzip

私はこれに何時間も費やしてから、これらの2行でどれほど単純であるかを理解しました。暗黙的にフラッシュを使用しないでください

于 2012-10-03T18:51:02.980 に答える