我有兩個廣告並希望在8小時內運行它們,意味着ad1
在腳本啓動時立即啓動,ad2
在指定爲8小時後啓動28800
秒。我正在尋求功能sleep()
和time_sleep_until()
,但有點困惑如何使用它們之間的廣告。如何在特定時間後在腳本中運行特定條件php
我的廣告是在數組中定義的。另外,我試了一次sleep
函數在我的本地主機立即執行一個廣告,另一個在sleep(28800)
後執行,腳本繼續執行並顯示兩個廣告的輸出。這可能是一個小問題,我沒有正確應用邏輯。
我有兩個廣告並希望在8小時內運行它們,意味着ad1
在腳本啓動時立即啓動,ad2
在指定爲8小時後啓動28800
秒。我正在尋求功能sleep()
和time_sleep_until()
,但有點困惑如何使用它們之間的廣告。如何在特定時間後在腳本中運行特定條件php
我的廣告是在數組中定義的。另外,我試了一次sleep
函數在我的本地主機立即執行一個廣告,另一個在sleep(28800)
後執行,腳本繼續執行並顯示兩個廣告的輸出。這可能是一個小問題,我沒有正確應用邏輯。
這聽起來似乎對PHP實際負責在這裏做什麼有一些困惑。當有人向Web服務器發出請求時,正在調用PHP腳本,但在服務完請求後,它完成並退出。當下一個請求進入時,它不知道第一個請求。
如果您使用sleep(n)
函數睡眠n秒,那將暫停Web服務器的響應,這是一個非常糟糕的主意,而不是您想要實現的目標。
一般來說,如果你想根據時間切換一些內容,最好是在服務器時間之外(總是已知的),而不是像「服務器運行多久」這樣的事情,它沒有意味着在現實世界中。
舉個簡單的例子,假設您想要以8小時爲單位提供3個不同的廣告。您可以編寫一些代碼,查找當天的小時,然後適當選擇一個廣告。例如:
$selection = (date('G',time())/8);
switch ($selection) {
case 0:
echo 'ad option 1!';
break;
case 1:
echo 'ad option 2!';
break;
case 2:
echo 'ad option 3!';
break;
}
的date('G',time())
函數返回的當前系統時間,這將是0-23小時部。除以8將會給你一個0,1或2,並從那裏你可以選擇要顯示的內容。
不確定這將完全滿足您正在嘗試做的事情。如果沒有,您可能需要涉及某種數據庫,並且需要某種工作來更新廣告以便在某個時間間隔內投放(如果可能,我會避免這種情況)。
+1非常好解釋,我現在沒有提交答案,我想不出一個比「PHP運行服務器端並在完成處理hurrdurr後生成的HTML」更好的解釋,你詳細解釋瞭如何'sleep()'以一種簡單的方式工作,很好地完成。而解決方案本身簡單實用。 –
@futureal:但是如果我必須隨機選擇這些廣告的8小時,就像ad1運行8小時,ad2在ad1之後運行......如何得到這一個。沒有使用數據庫,腳本可以嗎? – Shashank
爲了實現這一點,您需要擁有某種持久性信息,這需要數據庫或其他類型的服務器端存儲。你可以使用cron任務來每隔一段時間更新一次文件,然後只是提供該文件的內容,但這看起來確實是不必要的。如果您只需要投放隨機廣告,但並不總是按相同順序投放,則可以使用其他算術技巧,如模數運算符。例如,月份中的某天%3將始終爲您提供一個介於0和2之間的值,該值根據當天而變化,依此類推。但是你可能需要一個數據庫。 – futureal
你不應該跑這麼長時間的腳本。改用cron。您可以以8小時不同的時間調用相同的腳本,並基於數據庫切換呼叫ad_1或ad_2。
由於我的SDK只知道一個廣告所在的腳本,並且cron完全不同於這個問題。由於cron執行您的時區定義的腳本,我想在特定時間後執行一些字符串。 – Shashank
?..............什麼? –
您能否提供更多關於這些廣告投放方式的信息? PHP腳本是通過Web服務器提供服務還是在命令行上運行?在這種情況下,「腳本啓動時立即」是什麼意思? 'sleep(n)'函數將保持當前進程運行n秒,這聽起來不像你想要的。 – futureal
不是100%確定你的意思,但['sleep()'](http://php.net/manual/en/function.sleep.php)只會延遲腳本的執行(停在中間),然後一起顯示輸出。如果你想根據一天的時間渲染不同的廣告,你很可能不得不操作['time()'](http://php.net/manual/en/function.time.php)功能,並根據相對時間顯示它們,則必須將廣告最後一次切換到的時間存儲在db字段或txt文件中,然後在加載頁面時檢查該時間。 –
@futureal:是的,PHP腳本通過網絡服務器發佈並在市場上發佈這些廣告。廣告的定義如下:
array('name'=>"adname", 'desc'=>"aboutad", 'link'="marketlink");
,我們將它們編碼爲json併發送到服務器。並立即意味着當腳本啓動php產生第一個廣告和8小時後產生另一個。實際上,我認爲睡眠會停止腳本一段時間,然後再次處理併產生另一個廣告。 – Shashank