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 секунд паузы, а затем следующая дата.
Есть ли какие-либо альтернативные способы, которыми я мог бы написать это, чтобы это работало правильно?
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(). Я говорю это потому, что между сервером и браузером пользователей, возможно, существует много уровней программного обеспечения, и любой из этих уровней может решить буферизировать, пока не получит достаточно данных для отправки того, что, по его мнению, является сетевым фреймом разумного размера. заполнение пробелами может помочь нарушить буферизацию.
Вам нужен выходной буфер! Попробуйте использовать 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');
}