2011-12-20 2 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> 

код работает, как ожидалось (отображает шаги по одному) на Chrome, Firefox и IE, но когда я открываю его из Android-браузера, то флеши не работают, и все сразу отображается на завершение.

Любые намеки на источник проблемы? Спасибо

+2

Это не проблема с PHP, у браузера, вероятно, есть своя буферизация, которая препятствует отображению текста, пока он не выведет X-символы. –

+0

Я собирался сказать (например, @Truth), PHP работает на заднем конце и не имеет ничего общего с вашим браузером. эти заявления «сна» заставляют меня волноваться на совершенно другом уровне. – Jessedc

+0

@ Jessedc это, вероятно, ради тестирования, но просто из любопытства, почему это вас беспокоит? –

ответ

0

Причиной этого является, безусловно, 4K буферизация в браузере Android. Единственный вариант, который у вас есть, - это вывести выход на 4K, как описано в отчете об ошибке this.

+0

Большое спасибо @fab. Я проверил отчет об ошибках, который вы предложили, и похоже, что это может быть источником проблемы. Что касается решения, то заполнение каждого сообщения до 4K не очень «дружественным по отношению к данным», но я не могу думать ни о чем другом, кроме изменения модели push для чего-то еще. –