我在使用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秒的停頓,然後下一個日期。
有沒有其他方法可以寫這個,所以它能正常工作?
我在使用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秒的停頓,然後下一個日期。
有沒有其他方法可以寫這個,所以它能正常工作?
// 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();
您可以通過每次調用之前呼應多個空格提高穩健性去衝()。我這樣說是因爲在服務器和用戶瀏覽器之間可能有很多層軟件,並且這些層中的任何層都可能決定進行緩衝,直到獲得足夠的數據來發送感覺是合理大小的網絡幀。用空格填充可能有助於顛覆緩衝。
@VolkerK我想我也記得類似的東西。我知道很久以前,我玩過這個遊戲,有些瀏覽器直到你的div或table等的結束標記被接收到時纔會呈現HTML塊。 – goat
非常感謝,它的工作! – user3416605
您需要輸出緩衝區!儘量塗用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');
}
它適用於我;後者是五秒鐘後。 – Mooseman
btw:通常你應該避免停止你的php實例。除非這只是用於瀏覽器渲染引擎的示例代碼,或者您有一個非常特殊的情況,'sleep()'是一個紅旗。只是瘋狂的猜測:你已經把'if'語句放在那裏,因爲你的IDE把sleep()標記爲「臭」? – VolkerK