寫一個(gè)你需要的php業(yè)務(wù)的腳本,然后在服務(wù)器上,設(shè)置定時(shí)任務(wù),執(zhí)行這個(gè)腳本,就行了
創(chuàng)新互聯(lián)主營六枝網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā),六枝h5微信小程序定制開發(fā)搭建,六枝網(wǎng)站營銷推廣歡迎六枝等地區(qū)企業(yè)咨詢
一. 簡單
?php
ignore_user_abort();//關(guān)掉瀏覽器,PHP腳本也可以繼續(xù)執(zhí)行.
set_time_limit(0);// 通過set_time_limit(0)可以讓程序無限制的執(zhí)行下去
ini_set('memory_limit','512M'); // 設(shè)置內(nèi)存限制
$interval=60*30;// 每隔半小時(shí)運(yùn)行
do{
//ToDo
sleep($interval);// 等待5分鐘
}
while(true);
二. 簡單 可控型
config.php
?php
return 1;
?
cron.php
ignore_user_abort();//關(guān)掉瀏覽器,PHP腳本也可以繼續(xù)執(zhí)行.
set_time_limit(0);// 通過set_time_limit(0)可以讓程序無限制的執(zhí)行下去
$interval=60*30;// 每隔半小時(shí)運(yùn)行
do{
$run = include 'config.php';
if(!$run) die('process abort');
//ToDo
sleep($interval);// 等待5分鐘
}
while(true);
三. 簡單 改進(jìn)型
?php
$time=15;
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
/*
function
*/
sleep($time);
file_get_contents($url);
?
定時(shí)任務(wù)最好的方法是用linux系統(tǒng)的加護(hù)任務(wù)來寫,你是虛擬主機(jī)那無法用這個(gè)法子,你可以寫前臺訪問觸發(fā)的法子,把代碼寫到頁面,判斷時(shí)間段如果是在設(shè)置的時(shí)間段就執(zhí)行。
php中定時(shí)計(jì)劃任務(wù)的實(shí)現(xiàn)原理:
當(dāng) PHP 腳本正常地運(yùn)行 NORMAL 狀態(tài)時(shí),連接為有效。當(dāng)遠(yuǎn)程客戶端中斷連接時(shí),ABORTED 狀態(tài)的標(biāo)記將會被打開。遠(yuǎn)程客戶端連接的中斷通常是由用戶點(diǎn)擊 STOP 按鈕導(dǎo)致的。當(dāng)連接時(shí)間超過 PHP 的時(shí)限時(shí),TIMEOUT 狀態(tài)的標(biāo)記將被打開。
示例代碼:
?php
ignore_user_abort(true);set_time_limit(0);
date_default_timezone_set('PRC'); // 切換到中國的時(shí)間
$run_time = strtotime('+1 day'); // 定時(shí)任務(wù)第一次執(zhí)行的時(shí)間是明天的這個(gè)時(shí)候
$interval = 3600*12; // 每12個(gè)小時(shí)執(zhí)行一次
if(!file_exists(dirname(__FILE__).'/cron-run')) exit(); // 在目錄下存放一個(gè)cron-run文件,如果這個(gè)文件不存在,說明已經(jīng)在執(zhí)行過程中了,該任務(wù)就不能再激活,執(zhí)行第二次,否則這個(gè)文件被多次訪問的話,服務(wù)器就要崩潰掉了
do {
if(!file_exists(dirname(__FILE__).'/cron-switch')) break; // 如果不存在cron-switch這個(gè)文件,就停止執(zhí)行,這是一個(gè)開關(guān)的作用
$gmt_time = microtime(true); // 當(dāng)前的運(yùn)行時(shí)間,精確到0.0001秒
$loop = isset($loop) $loop ? $loop : $run_time - $gmt_time; // 這里處理是為了確定還要等多久才開始第一次執(zhí)行任務(wù),$loop就是要等多久才執(zhí)行的時(shí)間間隔
$loop = $loop 0 ? $loop : 0;
if(!$loop) break; // 如果循環(huán)的間隔為零,則停止
sleep($loop);
// ...
// 執(zhí)行某些代碼
// ...
@unlink(dirname(__FILE__).'/cron-run'); // 這里就是通過刪除cron-run來告訴程序,這個(gè)定時(shí)任務(wù)已經(jīng)在執(zhí)行過程中,不能再執(zhí)行一個(gè)新的同樣的任務(wù)
$loop = $interval;
} while(true);