2011-07-27 51 views
3

我的foreach功能打印學生名字我該如何運行帶有定時器的php腳本?

$names = array("Alex","Brad","Tom"); 
foreach($names as $name) { 
    echo "$name <br />"; 
    sleep(3); 
} 

如何打印每一個名字,每次3秒了嗎? "echo $name"後我需要一些計時器來停止循環,並等待3秒鐘。 sleep()功能在這裏不起作用。我還能做什麼?

+0

查看ob_flush()和flush() –

+0

這是在命令行還是在網頁上? – Jim

回答

1

您可以用JavaScript做到這一點,AJAX

或平齊()函數

<?php 
$names = array("Alex","Brad","Tom"); 
foreach($names as $name) { 
    echo "$name <br />"; 
    flush(); 
    sleep(3); 
} 

working demo

+2

這不是事實。即使我認爲這是一種不好的做法,你也可以這樣做。 – Fabio

+0

它不適用於flush(); – genesis

+0

@Fabio:它在一臺服務器上適用於我,但不適用於其他服務器。這怎麼可能? – genesis

3

嘗試使用flush功能

ob_start();  
$names = array("Alex","Brad","Tom"); 
foreach($names as $name) { 
    echo "$name <br />"; 
    ob_flush(); 
    flush();  
    sleep(10); 
} 
4

你不能做到這一點的服務器端(可靠)。這是因爲您的流量被持有或緩衝的可能性太大:通過網絡服務器,代理服務器,瀏覽器等等。然而,它可能適用於CLI。

所以我肯定會做它的客戶端,而不犧牲安全(如果需要)。

如果這只是爲了「美觀」的目的,您可以創建一個AJAX方法,它將返回名稱數組,然後讓Javascript將其輸出與其定時器。或者,您可以讓AJAX使用定時器調用PHP腳本,而PHP將只返回一個名稱。它可以將當前時間戳保存在數據庫或會話變量中,並且在一段時間過後纔會返回新的名稱。

相關問題