2013-01-24 38 views
1

可能重複:
Is there a function similar to setTimeout() (JavaScript) for PHP?如何在PHP中執行超時?

有沒有辦法做到在PHP超時?類似於Javascript中的setTimeout()。 我想在5分鐘後在數據庫中插入數據。

編輯:另外。 5分鐘後它會做另一件事。一個函數將被執行。然後,該方法不應該與數據庫。掛起是不可取的

+0

http:// stackoverflow。com/questions/3435418/is-there-a-function-similar-to-settimeout-javascript-for -f –

回答

0

php sleep()函數是要走的路。更多詳情,請點擊this thread。在你的情況下代碼可能是:

<? 

sleep(300); // Or 'sleep(5*60);' to make it more readable. 
echo 'Do something!'; 

?> 
+0

'sleep()'掛起腳本 – vicenrele

+0

原始海報的帖子中沒有任何內容表明掛起是不可取的。 – JakeGould

+0

你是對的。我會編輯它 – vicenrele

1

你需要使用類似於cron作業或任務調度程序的東西,這取決於你所在的位置。 PHP不是事件驅動的。

-2

您可以使用AJAX通過javascript setTimeout保存數據。

+0

請張貼downvote的原因 – kwelsan

+2

我沒有downvote,但我可能應該因爲這個問題的答案多麼無關緊要。 –

+0

@Sandy,你正在推薦一個PHP新手創建一個JavaScript/PHP組合Web服務來解決純PHP問題? – JakeGould

0

林不知道爲什麼你需要這一點,但你可以使用

sleep(300); 

更多http://php.net/manual/en/function.sleep.php

但我會用一個更優雅的解決方案,這同樣是依賴於你可以或不可以做什麼。

我會將數據存儲在一個臨時文件中。然後使用cron每五分鐘運行一次腳本以檢查天氣或不存在數據文件。如果有,請取出該文件並插入數據庫。

+1

'睡眠(5000);'? 83.3333分鐘? – JakeGould

+1

你是對的,在一天晚些時候:D –

+0

睡眠將掛起腳本。它不僅不雅,而且不可接受。 – gd1

4

如果數據庫還沒有CURRENT_TIMESTAMP字段,請添加一個。然後,立即插入該行,但將該字段設置爲DATE_ADD(NOW(),INTERVAL 5 MINUTE)

然後,在任何代碼你有SELECT從這個表荷蘭國際集團,包括WHERE ts <= NOW()(其中ts是你CURRENT_TIMESTAMP字段的名稱)

我在cron腳本的一個使用這種技術來模擬運行它非實際上它每15分鐘運行一次,使用0到15分鐘之間的隨機間隔停止,並且效果非常好。

+0

這似乎是對我來說最好的方法。 – gd1

+0

5分鐘後它會做另一件事。一個函數將被執行。然後,該方法不應該與數據庫。 – vicenrele

+0

@Kolink。你能指點我一個例子嗎?如何給我添加'CURRENT_TIMESTAMP'?如何將'CURRENT_TIMESTAMP'字段設置爲'DATE_ADD(NOW(),INTERVAL 5 MINUTE)'? – vicenrele

1

像其他人一樣說,沒有「乾淨」的方式。您最好使用託管環境提供的cron作業或類似調度程序的實用程序。 我強烈建議您不要使用sleep()

另一種方法是徹底改變你的方法。你爲什麼不立即把數據放入數據庫,但5分鐘後給它一個不同的「含義」?
例如您發佈帶有時間戳的新行。閱讀時,過濾掉5分鐘前插入的所有行。

+0

爲什麼不使用'sleep()'? – vicenrele

+0

它掛起腳本,該腳本仍在運行,但沒有響應。 HTTP客戶端的糟糕時間:) – gd1

+0

5分鐘後它會做另一件事情。一個函數將被執行。然後,該方法不應該與數據庫。一些想法? – vicenrele