2012-12-16 28 views
10

私のウェブサイト(drupalで実行中)には、ob_flush関数が実行されるまでに長時間(10〜100秒)かかることがあります。理由を知るにはどうすればいいですか?何が原因でこれほど長い時間がかかるのでしょうか?ページの先頭に enter image description hereob_flushの実行に時間がかかります

+0

この機能によってアプリケーションがフリーズすると思いますか? – ualinker

+0

@ualinker私がアップロードした画像をご覧ください – user16948

+0

'ob_start()'と 'ob_flush()'コンテキストでコードを貼り付けてもらえますか? – ualinker

答えて

0

使用

<?ob_start();?> 

とページの最後に

<?ob_flush();?> 

は、この問題を解決します。

0

SET php.iniの

2

output_buffering = Off

はこれを試してみてください:

ob_start(); 
//Your code to generate the output 
$result = ob_get_contents(); //save the contents of output buffer to a string 
ob_end_clean(); 
echo $result; 

それは私のために迅速に実行されます。

0

[あなたが質問をDrupalに付ける場合は、Drupalの問題のように思えるかもしれません。具体的には、バッファをフラッシュすると外側のバッファに書き込むことになり、書き込んだデータをフィルタリングするために呼び出されるたくさんのフックがトリガされます。]

あなたの問題はネストされたバッファ。 Drupalは実際にはバッファを好きで、その場全体をバッファします。結果確認:それはちょうどバッファリングの次の最外層にあなたの内部バッファの内容を追加します:

echo "<pre>\nBuffering level: "; 
    . ob_get_level() . 
    . "\nBuffer status:\n" 
    . var_dump(ob_get_status(TRUE)) 
    . "\n</pre>"; 

あなたが持っている場合は、ネストされたバッファを、私はob_flush()は、あなたのために何もしないだろうと思います。

ネストされたバッファは、Drupal自体(上で示したもの)、またはzlib-output-compressionとoutput_bufferingの設定から来ている可能性があります。

あなたのバッファがネストされていない、と上記の設定が助けていない場合、あなたはまたの部分に操作を分割し、そこにプロファイラを実行して、時間がかかっているどの部分を参照したい場合があります。

$data = ob_get_contents(); // Return the contents of the output buffer. 
ob_clean(); // Clean (erase) the output buffer. 
ob_end(); // Close the buffer. 
echo($data); // Output our data - only works if there's no outer buffer! 
ob_start(); // Start our buffer again. 

しかし、質問は「あなたは何を達成しようとしていますか?」となります。 ob_flush()がここで何をしていると思いますか?答えが「これまでに行ったことのすべてをブラウザにプッシュしたい」場合は、ob_flush()が正しい方法ではないことが恐れられます。

関連する問題