程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php一種每天僅第一次啟動時執行的方法的實現

php一種每天僅第一次啟動時執行的方法的實現

日期:2017/1/17 17:18:50      編輯:關於PHP編程

不知道大家有沒有遇到過這樣的問題,就是想要寫一個計劃執行的程序,比如每天的幾點定時的執行,php這種web程序,所謂的執行是必須通過訪問的。有ignore_user_abort(true);函數可以讓程序在關閉浏覽器在後台繼續執行,我之前寫過一個類似的取巧的自動執行方法,也是可以實現定時執行,但是那種方法畢竟是有弊端的,所以我也再想,有的時候可能根據需求的不同可以退而求其次,讓系統每次每天第一登陸的時候去執行。
至於這樣的方式適不適合你的需求,我們應該好好的研究一下。如果你的這個功能是單純的改變一些數據的屬性,這些數據並不是必須每天都去改,而是當其進入系統顯示成最新狀態就可以的就適合這樣做。不適合那種別人不能訪問到執行計劃程序的函數,僅能自己人可以的。無論如何先說一下這種實現方式是如何做的。
我們可以通過一個txt文件來存儲最後操作這個函數的時間yyyy-mm-dd這樣的形式,寫一個函數,獲取當前時間,也轉化為yyyy-mm-dd這樣的形式,對比,如果不同則執行你要的操作,如果相同就不執行,執行之後將當前時間再以yyyy-mm-dd這樣的形式寫入到txt文件中。這樣讓登陸系統的用戶每次登陸都先執行這個方法。不過,這裡考慮到這樣的執行可能數據量很大,我們可以這樣來做,將這個方法的最大執行時間設置為無限長,並設置為可以在後台執行。前台用戶登陸的首頁加載完自己的頁面後通過ajax來訪問這個頁面,這樣不就解決效率的問題了嗎。
下面看一下我的這樣一個代碼,後台也可以寫個配置文件,是否開啟自動執行這個程序的功能。
//自動數據轉移
function turnMessage(){
set_time_limit(0);
ignore_user_abort(true);
global $gzhuan,$guser,$hfdate1;
if('1'==$gzhuan){
$now = time();
$time = date('Y-m-d',$now);
$file = 'include/time.txt';
$f = fopen($file,'r+');
$t = fread($f,filesize($file));
fclose($f);
if($t!=$time){
$timeok = date('Y-m-d',$now-$hfdate1*86400);
$user = $this->tmp_mod->getOneUser($guser);
if($user){
$list = $this->tmp_mod->getGuoqi($timeok);
if($list[0]){
$ymd = date('Y-m-d H:i:s',$now);
$d['Adminid'] = $guser;
$d['Admin'] = $user['adminRealName'];
$d['hfzt'] = 1;
$d['YyTime'] = $time;
$d['zhuanru'] = 1;
foreach($list as $key=>$val){
$data['pro_id'] = $val['ID'];
$data['admin_id'] = 0;
$data['adminname'] = '系統';
$data['content'] = '系統自動轉入本數據,原預約時間為:'.$val['YyTime'];
$data['dates'] = $ymd;
$data['type'] = 0;
$rs = $this->tmp_mod->addProBz($data);
$rs2 = $this->tmp_mod->editProducts($val['ID'],$d);
}
if($rs&&$rs2){
parent::innerLog('自動轉移數據','1');
$f = fopen($file,'w+');
fwrite($f,$time);
fclose($f);
}else{
parent::innerLog('自動轉移數據','0');
}
}
}
}
}
unset($gzhuan,$guser,$hfdate1);
exit;
}
上面的$this->tmp_mod->等方法都是我用的框架中一下操作數據庫的方法,不用深究。我覺得這樣寫,再用ajax來調取,就會不影響用戶的效率,又能達到我們的目的,也是很不錯的選擇。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved