2011-07-22 13 views
2

私のフラッシュメカニズムが動作を停止しました。私はなぜそれがわかりません。 私は運で、今簡単なフラッシュの例を実行しようとしている:いくつかの読み取りを行った後php flush not working

echo "before sleep"; 
flush(); 
sleep(5); 
echo "after sleep"; 

、と理解NGIN xは最近私のサーバーにインストールしていた、私は自分のドメインに対して無効にすることを要求しました。

も、私は、無効GZIPを試してみましたまた

SetOutputFilter DEFLATE 
SetEnv no-gzip dont-vary 

を.htaccessファイルするためにこれらの行を追加して、私のPHPファイルに

ini_set('output_buffering','on'); 
ini_set('zlib.output_compression', 0); 
をこれらを追加しようとした(サーバ管理者は、彼がこの特定のドメインのためにそれを無効にしました)

何も役に立ちません。 5秒間スリープ状態にして、すべてのコンテンツを一緒に表示します。 私はこれまでに使用していましたが、出力バッファ(ob_start、ob_flushなど)を使用しています。

+0

レンダリングを開始する前に、いくつかのブラウザは少なくとも256バイトを受け取る必要があります。 –

+0

ああ、私もそれを試みた....まだ動作していない。 10倍 – normalppl

答えて

0

「停止した作業」は非常に高いレベルです。あなたは実際に何がうまくいくかを見て、より多くを見つけ出すべきです。

これは、ネットワークトラフィックを監視することによって実行できます。どのくらいの応答がすでに完了し、どのエンコーディングが送信されているかがわかります。

レスポンスが圧縮される場合、ほとんどの圧縮関数は圧縮する前に一定のバイト数を必要とします。だからflush()でも出力バッファをフラッシュするようにPHPにシグナルを送ることはできますが、PHP出力フィルタリングの中にも、圧縮を行うのを待っているサーバの中に置くこともできます。そのため、Apacheの圧縮の次に、PHPの設定が圧縮を行っているかどうかをチェックして、それを無効にします。

ネットワークトラフィックを監視したくない場合、curlコマンドラインユーティリティは、何が起きているのかを表示するためにかなりうまく機能しており、ネットワーク監視の代わりに使用する方が簡単かもしれません。

curl -Ni --raw URL 

ので、あなたのスクリプト/サーバーの出力を直接見るあなたはcurlによってバッファリングを無効にします-Nスイッチを使用していることを確認してください。

これまでの回答では、curlというコマンドを使って圧縮の完了時にリクエストの出力を調べる方法については、Inspecting HTTP Compression Problems with Curlセクションを参照してください。

curlは最終的に圧縮されていないデータを圧縮して表示することができ、要求ごとに圧縮を無効にすることができるため、サーバーやPHP出力の圧縮設定に関係なく、

0
<?php 
ini_set('zlib.output_handler', ''); 
ini_set('zlib.output_compression', 0); 
ini_set('output_handler', ''); 
ini_set('output_buffering', false); 
ini_set('implicit_flush', true); 
apache_setenv('no-gzip', '1'); 


for($i = 0; $i < 5; $i++){ 
    echo str_repeat(chr(0), 4096); #flood apache some null bytes so it feels the packet is big enough to be sent... 
    echo "$i<br/>"; 
    flush(); 
    sleep(1); 
} 
?>