2014-03-07 97 views
5

我有一個簡單的PHP腳本內的回聲調用屏幕上的打印參數:增加延遲迴音

<body> 
<p>the string will appear in 30 seconds:</p> 
<p><?php echo $string; ?></p> 
</body> 

我想的是,「回聲」運行前,該系統將等待X秒。因此,「30秒後出現的字符串」文本將首先出現,30秒後,$字符串將出現在它的下面。如何做到這一點?在加載之前,Sleep()傾向於延遲整個頁面。

+0

確保您的輸出不會被緩衝。 – Musa

+0

,看起來它會更好地實現使用JavaScript? – Stu

+1

然後你應該使用Javascript進行異步任務。 –

回答

4

你可以使用PHP睡眠等待30秒:

<body> 
<p>the string will appear in 30 seconds:</p> 
<p><?php sleep(30); echo $string; ?></p> 
</body> 

但是,當你這樣做,這取決於你的PHP和Apache的設置,整個頁面可能之前充分渲染和發送一個HTTP等待30秒回覆給客戶。

此外,如果您向客戶端發送部分響應,有時可能會等待呈現內容,直到加載足夠的頁面以呈現數據(例如表格的情況)。

嘗試使用JS來代替,以使頁面呈現,然後在30秒後出現隱藏的數據:

<body> 
<p>the string will appear in 30 seconds:</p> 
<p id="sleep" style="display:none"><?php echo $string; ?></p> 
<script> 
    window.setTimeout(function() { 
     document.getElementById('sleep').style.display = ''; 
    }, 30000); 
</body> 
+0

確實,sleep()會延遲整個頁面。第二種方法在某種程度上不起作用,但是當使用JS做類似的事情時,代碼確實出現在X秒之後,但它仍然在我試圖阻止這種情況的HTML源代碼中可見。 – AssafT

+0

您可以使用延遲30秒的AJAX請求從服務器檢索數據並將其顯示在頁面上。退房https://api.jquery.com/load/ –

+0

它沒有工作,因爲我有30毫秒的超時。已更新至30000,其按預期工作。 –

0

你可以嘗試的解決方法,這種情況下使用Javascript。 jQuery庫非常乾淨和實用。你應該嘗試一下:

HTML

<body> 
    <p>the string will appear in 30 seconds:</p> 
    <p id="string" hidden="hidden"><?php echo $string; ?></p> 
</body> 

JS

$(document).ready(function() { 
    $("#string").delay(30000).show(); 
}); 

重要提示:由於JavaScript是一種客戶端語言,這種解決方案只是 「拖延」 了$ string在客戶端設備中回顯,但自服務器開始以來,無論如何接收到變量$ string ...如果有一些「不耐煩和黑客易「的客戶端,只是查看您的頁面的源代碼將做的伎倆... :(

服務器端替代:如果提出的解決方法是無效的爲您的應用程序(因爲我不知道它的安全需求),我會嘗試,例如用另一種服務器端方法檢查。下面是基本步驟:

  1. 保存時間戳與(例如,在會話cookie)所述客戶端的信息一起在服務器上的初始請求

  2. 然後,不要直接從服務器發送$ string,只需將其保留爲空即可。

  3. 使用JS,延遲30秒後再向服務器(例如通過AJAX)詢問$ string。這個AJAX調用將在初始請求後的30秒後觸發,服務器現在可以檢查會話cookie(包含有關客戶端和時間戳的信息)。

  4. 如果(current_timestamp() - cookie_timestamp()> = 30)==>服務器返回$ string或在其他情況下不返回任何內容。

祝你好運;)

+0

TNX ...我決定做一個服務器端解決方案。所有JS方法隱藏字符串,但它出現在html源文件中。 – AssafT