2010-06-20 80 views
5

我想讓PHP輸出一些文本,然後睡一會兒,然後輸出一些更多的文本。睡前PHP輸出文本

<?php 

echo 'Output one.'; 

usleep(1500000); 

echo 'Output two.'; 

?> 

我的問題是,所有的文本被同時推出 - 等侯的1.5秒。我已經閱讀了一些關於一個叫做flush的函數 - 但它似乎不起作用。也許我沒有用它寫。任何幫助將不勝感激^^

在此先感謝!

回答

8

檢查了這一點

<?php 

ob_start(); 

echo 'Output one.'; 
ob_flush(); 
usleep(1500000); 
echo 'Output two.'; 
ob_flush(); 

?> 
+0

這並沒有爲我工作,但我接着說:沖洗();''每次之後使用ob_flush();'然後它的工作。有人可以解釋爲什麼我需要「沖洗」嗎? – Salam 2018-03-05 09:25:49

1

雖然Pentium10的解決方案可能會工作,你可能要考慮這個移動到客戶端。進行異步調用以獲取第一個值,打印它,休眠所需的時間,然後重複第二個值。

2

我認爲這是一個http請求/響應問題。在命令行中,腳本可以正常工作。

正常情況下,響應已準備完畢併發送給客戶端。如果您的響應的大小必須發送多個tcp包,則可能會在腳本準備好處理之前發送第一個包。所以它取決於輸出的大小。根據客戶端/網絡瀏覽器的不同,在完整的響應到達客戶端之前,也可能會發生第一個包被渲染的情況。

作爲Noufal Ibrahim即時通訊打字時回答,我完全同意他。以異步方式進行。

4

Pentium10的答案對我來說並不適用。但是當我去到PHP文檔頁面時,那裏有很多好評。

http://php.net/manual/en/function.ob-flush.php

這爲我工作使用的是Firefox 3.5.9,PHP 5.2.11,阿帕奇流失本地的Windows 7筆記本電腦:

echo "test"; 
ob_end_flush(); 
flush(); 
usleep(x); 
echo "test"; 

的ob_end_flush()函數是爲了獲取發送的數據是至關重要的。

+0

謝謝,工作! – 2015-12-26 12:39:24

-1
echo 'Output one.'; 
ob_flush(); 
flush(); 
usleep(1500000); 
echo 'Output two.'; 
0

你的問題是,這是PHP。這是一個預處理器。因此,PHP腳本運行,輸出第一個日誌,然後睡覺,然後輸出第二個日誌,只有它被髮送並顯示在瀏覽器中。

如果您希望延遲在瀏覽器屏幕上可見,則需要javascript。

function showLog() { 
 
    $(".secondlog").show(); 
 
} 
 

 
$(document).ready(function() { 
 
    setTimeout(showLog,3000); 
 
});
.firstlog { 
 
    border: 1px solid #AEAEAE; 
 
} 
 

 
.secondlog { 
 
    display: none; 
 
    border: 1px solid #AEAEAE; 
 
    margin-top: 20px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="firstlog"> 
 
    Output of first log 
 
</div> 
 
<div class="secondlog"> 
 
    Output of second log 
 
</div> 
 

 
<p>Wait for 3 seconds...</p>