2011-12-20 21 views
2

私はこれに類似した質問を見つけましたが、具体的なものはありません。 次のコードは、問題を再現する簡略化されたバージョンです。PHPのflush()/ ob_flush()はAndroidブラウザのみでは動作しません

<?php 
function addProgressText($texto) 
{ 
    echo '<script type="text/javascript">'; 
    echo 'document.getElementById("mensajesEnProgreso").innerHTML += "'.$texto.'";'; 
    echo '</script>'; 
    flush(); 
    ob_flush(); 
} 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<meta name="viewport" content="width=device-width" /> 
<title>TEST - Flush for Android</title> 
</head> 

<body> 
    <div id="divEnProgreso"> 
    <p id="mensajesEnProgreso"></p> 
    </div> 

<?php 
addProgressText("Init..."); 
sleep(5); 
addProgressText("OK<br>Step 1... "); 
sleep(5); 
addProgressText("OK<br>Step 2... "); 
sleep(5); 
addProgressText("OK<br>Step 3... "); 
sleep(5); 
addProgressText("OK<br>FINISHED"); 
?> 
</body> 
</html> 

コード予想通りクロム、FirefoxとIE上で(ステップ1ずつ表示)動作しますが、私はAndroidのブラウザからそれを開いたときに、フラッシュが動作しないと、すべてが一度に応じで表示されます完了。

問題の原因に関するヒントはありますか? ありがとう

+2

これはPHPの問題ではないため、ブラウザにはおそらく独自のバッファリングがあり、X文字が出力されるまでテキストを表示できません。 –

+0

私は@Truthのように言っていますが、PHPはバックエンドで動作しており、ブラウザとは何の関係もありません。それらの「睡眠」のステートメントは、しかし、私は全体的に異なるレベルで心配しています。 – Jessedc

+0

@ Jessedcそれはおそらくテストのためですが、好奇心の外に、どうしてそれはあなたを心配していますか? –

答えて

0

理由は確かにAndroidブラウザでは4Kバッファリングです。 唯一のオプションは、thisバグレポートに記載されているように、出力を4Kにパディングすることです。

+0

ありがとう@fab。あなたが提案したバグレポートを確認したところ、問題の原因になる可能性があります。ソリューションに関しては、すべてのメッセージを4Kにパディングすることはあまり「小さなデータプランフレンドリー」ではありませんが、何か他のもののためにプッシュモデルを変更することは考えられません。 –

関連する問題