2012-12-17 52 views
-2

我試圖在PHP中的函數,計數多少次的函數可以被所有用戶設置一個全局計時器。在PHP Web環境

如果此功能已被使用,比方說,30倍,那麼它應該阻止了幾分鐘的訪問,然後重置計數器爲0

這是可能的PHP?

+0

我還在想如何使它,計數器部分不應該是很難做到的:也許我可以每次請求號碼存儲在一個文件,並把它拿來,但是這是我想避免的解決方案。最讓我擔心的是計時器部分可能帶有'sleep()'函數,但是恐怕這隻會影響單個用戶,而不是每個人。 – Vektor88

+1

在計數器值旁邊存儲時間戳。這一次所有進程都可以考慮相同的超時值。 – arkascha

回答

2

這是沒有問題的,甚至是微不足道的,如果所有的用途採取一個單一的過程中進行。您只需使用全局或靜態計數器變量並將其增加。只要進程正在運行,您可以訪問該值。

不過,我認爲你是在談論一個網絡環境和PHP函數由HTTP服務器執行的腳本的一部分?很抱歉,但你不提那......

在這種情況下,事情變得更加複雜,因爲它不是一個單一的過程了。您需要某種持久性存儲。典型場景爲此使用數據庫,文件或共享內存。這些允許不同的進程訪問共享的計數器值。

+0

是的,它在Web環境中,併發請求。我只是想知道是否有不同的解決方案比數據庫或文件,但似乎沒有。 – Vektor88

+0

那麼,你選擇了什麼共享訪問解決方案?你有什麼要求? – arkascha

+0

我只能想到一個事務性的MySQL數據庫查詢 – Vektor88

1

如果您使用數據庫反正我想說的最簡單的方法是在數據庫的表中增加一個值。您也可以在同一步驟中存儲時間戳。之後,下一個調用函數可以輕鬆讀取(增加的)值。如果你沒有數據庫,你也可以使用文本/ XML文件。

+0

這可能是一個解決方案,但我寧願不要查詢數據庫或從每個請求的文件中提取數據,這似乎效率不高。 – Vektor88