PHP - Ошибки Со Сном()


У меня возникли некоторые проблемы с функцией sleep() в PHP.

<?php
echo date('h:i:s') . "<br>";

//sleep for 5 seconds
if(1 == 1){
sleep(5);

//start again
echo date('h:i:s');
}
?>

Когда я запускаю этот код, я получаю 5 секунд паузы, а затем обе даты склеиваются вместе, вместо одной даты, 5 секунд паузы, а затем следующая дата.

Есть ли какие-либо альтернативные способы, которыми я мог бы написать это, чтобы это работало правильно?

Author: user3416605, 2014-03-30

2 answers

// turn off all layers of output buffering, if any
while (ob_get_level()) {
    ob_end_flush();
}
// some browsers tend to buffer the first N bytes of output, refusing to render until then
// give them what they want...
echo str_repeat(' ', 1024);

echo date('h:i:s') . "<br>";
// force php to flush its output buffers. this also TRIES to tell the webserver to flush, but may not work.
flush();

sleep(5);

echo date('h:i:s');
flush();

Вы можете повысить надежность, повторяя больше пробелов перед каждым вызовом функции flush(). Я говорю это потому, что между сервером и браузером пользователей, возможно, существует много уровней программного обеспечения, и любой из этих уровней может решить буферизировать, пока не получит достаточно данных для отправки того, что, по его мнению, является сетевым фреймом разумного размера. заполнение пробелами может помочь нарушить буферизацию.

 4
Author: goat, 2014-03-29 21:07:42

Вам нужен выходной буфер! Попробуйте использовать ob_start вверху, а после каждого sleep flush

Пример 1

ob_start();
echo date('h:i:s') . "<br>";

//sleep for 5 seconds
if(1 == 1){
    sleep(5);
    flush();
    ob_flush();

    //start again
    echo date('h:i:s');
}

Пример 2

ob_implicit_flush(true);
echo date('h:i:s') . "<br>";

//sleep for 5 seconds
if(1 == 1){
    sleep(5);

    //start again
    echo date('h:i:s');
}
 0
Author: Adrian Preuss, 2014-03-29 21:02:40