2012-05-08 7 views
5

大規模なPHPスクリプトは、生成されたHTMLの一部をブラウザに送信するためにフラッシュを使用し、apprを取るスクリプトの大部分を実行しています。 20秒。PHPがいつもうまくいっていないのは、1/5ページが正しく読み込まれていないのですか?

フラッシュ後に実行されているスクリプトの部分はかなり大きく、サーバーの予約(90%cpu)から多くを取ります。

5回に1回は、ブランク(白)のままです。つまり、ページがロード中であることを示す画像を送信するためにフラッシュが到着しなかったことを意味します。プログラムが終了した時点でも、ページはblanc(ブラウザはロード中であることを示しています)のままで、ページ全体をブラウザに送信する必要があります。

注目に値する: 戻るボタンを押すと、スクリプト全体が実行された後にブラウザに読み込まれたはずのページ全体が表示され、ブラウザは前のページに戻ります。

他の4倍のページがうまく読み込まれます。 PHPスクリプトの入力は5回すべて同じです。

私は私の.htaccesファイルでこれらの設定を持っている:これはブラウザに生成されたコードをフラッシュするステートメントです

addhandler x-httpd-php5-cgi .php5 
addhandler x-httpd-php5-cgi .php5 
addhandler x-httpd-php5-cgi .php5 
Header Set Cache-Control "max-age=0, no-store" 

print str_pad('',4096)."\n"; 
ob_flush(); 
flush(); 

この問題を引き起こしている可能性がありますか?

+0

素敵な話、コードはどこですか? –

+0

@LawrenceCherone私は、ブラウザにフラッシュするコードを追加しました。 – BastiaanWW

答えて

2

flush()は、apache/webserverに送信します。これはバッファ/待機することができ、バッファ/待機できる任意の数のプロキシをネットワークに送信します。これは最終的にブラウザで終了します。バッファリング/待機を決定することもできます。これらの頭痛にすべて対処したくない場合は、非同期メソッドを使用してください。 Gearmanは非常に簡単ですが、もちろん厳密には必要ありません。

2
print str_pad('',4096)."\n"; 

空の文字列が繰り返されていますか?どちらか早い方、バイトの一定量が受信されるまで、いくつかのWebブラウザがページをレンダリングしていないか、または応答が完了したので、たぶん、あなたは

print str_pad(' ',4096)."\n"; 

を意味し、その文の目的です。

関連する問題