2009-07-22 79 views
1

說我想要一個php腳本運行函數itstime()每小時。除了在服務器上設置cron作業,我該怎麼做?基於時間的php腳本

或者這是不可能的,因爲PHP腳本需要打開才能運行?

謝謝。

編輯:我想寫一些信息到一個日誌文件,並根據一些變量發送它在一封電子郵件。

回答

1

那麼,我絕對推薦爲此目的的cron工作。但理論上,您可以運行一個PHP腳本,運行itstime(),休眠一個小時,然後循環。雖然這很瘋狂。

該腳本看起來像:

<?php 
include('whatever.php'); 
while(true) { 
    itstime(); 
    sleep(3600); 
} 
?> 

一個可能會與nohup php mycrazyscript.php &運行它從你的終端分離並使其繼續運行,並使用pkill -f mycrazyscript終止它。

這是瘋狂的原因是,現在你已經有一個睡眠PHP進程掛在每小時59分鐘無所事事,你必須確保它在正確的時間運行和運行,哪個cron會照顧你的。

+0

我該怎麼做?爲什麼你說它瘋了? – lanrat 2009-07-22 02:49:17

+0

是肯定不是我選擇的方法,但如果cron不是一種選擇,可能是唯一的選擇。 – Christian 2009-07-22 02:49:38

+0

如果我使用這種方法意味着當我訪問這個頁面(要啓動腳本)它將永遠不會完成加載? 如果是這種情況,腳本會在頁面退出後停止運行? – lanrat 2009-07-22 02:56:28

1

只追加混亂的答案,所以給他信用。

mrlanrat - 見this

1

如果您沒有訪問cron的,但有機會獲得適度繁忙的Web服務器,你可以用它來觸發每隔一小時你的函數。這就是WordPress需要cron的方式。這裏是你將如何做到這一點:

<?php 
$lastrun = get_last_run_time(); // get value from database or filesystem 
if(time()-$lastrun > 60*60) { 
    itstime(); 
    set_last_run_time(time()); // write value back to database or filesystem 
} 
// The rest of your page 
?> 

當然,有一個非常嚴重的競爭狀態在這個代碼是。解決這個問題留給讀者。