Вопрос по sleep, flush, php, foreach – Использование flush () заменяет последнюю строку, а не создает новую в php

1

Допустим, мой PHP-код похож на ниже. , ,

$range = range(0, 5);
foreach ($range as $times) {
if (ob_get_level() == 0) ob_start();
for ($i = 0; $i
Я думаю, что php всегда показывает вывод после завершения скрипта! user1646111

Ваш Ответ

2   ответа
2

что вы выводите html, вы должны сделать это на стороне клиента в javascript.

Альтернативой php будет показ одной строки и перезагрузка страницы для отображения следующей. Излишне сложный и пустая трата ресурсов.

Обратите внимание, что php не может изменить HTML, который уже отправлен в браузер.

3

чтобы заменить элемент уже на странице:

<p id="ob">1</p>
<!--?php
$range = range(0, 5);
foreach ($range as $times) {
    if (ob_get_level() == 0) ob_start();
    for ($i = 0; $i<1; $i++){
        echo "<script-->document.getElementById('ob').innerHTML ='example$times';";
        echo str_pad('',4096)."\n";
        ob_flush();
        flush();
        sleep(1.2);
    }
    ob_end_flush();
}
?>

Или гораздо лучше использовать AJAX для опроса сервера на предмет следующего значения.

<!--?php
if(isset($_GET['poll'])){
    echo $_GET['poll']+1;
    die;
}
?-->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
var value = 0;
function poll(){
    setTimeout(function(){
        $.ajax({ url: "./test.php?poll="+value,cache: false,
        success: function(data){
            value = data;
            $("#ob").html('example'+value);
            //Next poll
            poll();
        }});
    }, 1200);
}

$(document).ready(function(){
    poll();
});
</script>
<p id="ob">example0</p>

Похожие вопросы