本文目錄一覽:
php discuz的定時任務是什麼原理怎麼實現的?求高手解答
php中定時計劃任務的實現原理:
當 PHP 腳本正常地運行 NORMAL 狀態時,連接為有效。當遠程客戶端中斷連接時,ABORTED 狀態的標記將會被打開。遠程客戶端連接的中斷通常是由用戶點擊 STOP 按鈕導致的。當連接時間超過 PHP 的時限時,TIMEOUT 狀態的標記將被打開。
示例代碼:
?php
ignore_user_abort(true);set_time_limit(0);
date_default_timezone_set(‘PRC’); // 切換到中國的時間
$run_time = strtotime(‘+1 day’); // 定時任務第一次執行的時間是明天的這個時候
$interval = 3600*12; // 每12個小時執行一次
if(!file_exists(dirname(__FILE__).’/cron-run’)) exit(); // 在目錄下存放一個cron-run文件,如果這個文件不存在,說明已經在執行過程中了,該任務就不能再激活,執行第二次,否則這個文件被多次訪問的話,伺服器就要崩潰掉了
do {
if(!file_exists(dirname(__FILE__).’/cron-switch’)) break; // 如果不存在cron-switch這個文件,就停止執行,這是一個開關的作用
$gmt_time = microtime(true); // 當前的運行時間,精確到0.0001秒
$loop = isset($loop) $loop ? $loop : $run_time – $gmt_time; // 這裡處理是為了確定還要等多久才開始第一次執行任務,$loop就是要等多久才執行的時間間隔
$loop = $loop 0 ? $loop : 0;
if(!$loop) break; // 如果循環的間隔為零,則停止
sleep($loop);
// …
// 執行某些代碼
// …
@unlink(dirname(__FILE__).’/cron-run’); // 這裡就是通過刪除cron-run來告訴程序,這個定時任務已經在執行過程中,不能再執行一個新的同樣的任務
$loop = $interval;
} while(true);
PHP計劃任務、定時執行任務的實現代碼
不知道能程序的性能會不會影響很大!
複製代碼
代碼如下:
ignore_user_abort();//關掉瀏覽器,PHP腳本也可以繼續執行.
set_time_limit(0);//
通過set_time_limit(0)可以讓程序無限制的執行下去
$interval=60*30;//
每隔半小時運行
do{
//這裡是你要執行的代碼
sleep($interval);//
等待5分鐘
}while(true);
Windows中使用計劃任務自動執行PHP程序實例
所謂任務計劃就是由計算機自動調用用戶事先設置好的應用程序,從而達到簡化用戶操作的目的。利用Windows
2000的任務計劃程序(相當與*NIX下的cron程序,這裡不再對其詳述),我們可以安排任何腳本、程序或文檔在最恰當的時候運行,從而滿足自己的需要。下面以Windows
2000為例。
具體來說,我們若需利用任務計劃程序自動運行則應執行如下步驟:
單擊”開始”按鈕,然後依次選擇”程序”→”附件”→”系統工具”→”任務計劃”(或者是”設置”→”控制面板”→”任務計劃”),啟動Windows
2000的任務計劃管理程序。
在”任務計劃”窗口中雙擊”添加任務計劃”圖標,啟動系統的”任務計劃嚮導”,然後單擊”下一步”按鈕,在給出的程序列表中選擇需要自動運行的應用程序,然後單擊”下一步”按鈕。
設置適當的任務計劃名稱並選擇自動執行這個任務的時間頻率(如每天、每星期、每月、一次性、每次啟動計算機時、每次登錄時等),然後單擊”下一步”按鈕。
此時系統將會要求用戶對程序運行的具體時間進行設置,如幾號、幾點鐘、哪幾個時間段才能運行等,我們只需根據自己的需要加以設置即可。
接下來系統將會要求用戶設置適當的用戶名及密碼(如圖5所示),以便系統今後能自動加以運行。
最後,我們只需單擊”完成”按鈕即可將相應任務添加到Windows
2000的任務計劃程序中,此後它就會自動”記住”這個任務,一旦系統時間及相關條件與用戶設置的計劃相符,它就會自動調用用戶所指定的應用程序,十分方
便(每次啟動Windows
2000的時候,任務計劃程序都會自動啟動,並在後台運行,確保用戶的計劃能夠按時執行)。
現在我們來測試一下剛才所建的任務是否成功,滑鼠右鍵單擊”php”程序圖標(如圖6所示),在彈出的菜單裡面選擇”運行”。一般情況下程序圖標只要這樣
激活運行就可以正常啟動。如果運行失敗可查看用戶和密碼是否設置正確,還有確定”Task
Scheduler”服務是否已啟動,本人當初就是為了節省系統資源把它關掉了導致運行失敗,害我找了大半天。另外也可從”系統日誌”里查看到底是什麼原
因造成運行失敗的。
好了,講了這麼多任務計劃的應用,現在我們切入正題,下面將介紹兩個例子:
一、讓PHP定時運行
編輯如下代碼,並保存為test.php:
複製代碼
代碼如下:
?php
$fp
=
@fopen(“test.txt”,
“a+”);
fwrite($fp,
date(“Y-m-d
H:i:s”)
.
“
讓PHP定時運行吧!\n”);
fclose($fp);
?
原創文章,作者:LUME,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/148444.html