2016-08-13 26 views
1

実行中に完了したアクションの現在のステータス/割合を提供するPHPスクリプトを実行しようとしています。そのために私はAJAXを使ってスクリプトを呼び出し、ob_flushを使ってスクリプトの実行中に出力をクライアントに送りますが、これはApacheで動作しましたが、今はNginxでプロジェクトを移植しています。Nginx/PHP-FPMでPHP ob_flushで出力をフラッシュ

//SET CORRECT CONTENT-TYPE (THEY WILL BE JSON STRINGS SEPARED BY BREAKLINE) 
header('Content-type: text/plain; charset=utf-8'); 
//DISABLE GZIP FOR THE SCRIPT 
ini_set('zlib.output_compression', 'Off'); 
ini_set('output_buffering', 'Off'); 
ini_set('output_handler', ''); 

ob_end_clean(); 
set_time_limit(0); 

for ($i = 0 ; $i < 5 ; $i++){ 
    echo "{\"code\":" . $i . "}\n"; 
    //SEND OUTPUT TO CLIENT 
    flush(); 
    ob_flush(); 
    sleep(1); 
} 

問題は、私はこれを実行すると、スクリプトが終了したときだけで、私は出力を得ることです:nginxの上で私はここに私が正しく実行しようとしているテストスクリプトだ、ハンドルPHPファイル用のPHP-FPMを使用します約5秒後に実行されます。 誰かが私が間違っていることを教えてくれる?

+0

ここを見てみましょう - http://serverfault.com/q/488767 –

+0

を今私は '「(関数 'におけるSTR_Repeatを使用して、メッセージにいくつかの余分なスペースを追加することにより、バッファの過負荷を解決したため、4096 * 8) '、それは非常に非効率的で洗練された方法で、フラッシングを使用していますが、NGINXで唯一のようですが、とにかく私はサーバー構成ブロックの' fastcgi_keep_conn on; '"指示NGINX設定ファイル、おそらく私は通常のPHPフラッシュを使用することができます。 – RyanJ

答えて

関連する問題