PHP制作定時任務(也稱計劃任務)的方法,大概分為2種:
創(chuàng)新互聯(lián)主營金堂縣網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,app軟件開發(fā)公司,金堂縣h5重慶小程序開發(fā)搭建,金堂縣網(wǎng)站營銷推廣歡迎金堂縣等地區(qū)企業(yè)咨詢
現(xiàn)在基本所有的PHP框架,如:ThinkPHP,Yii,Laravel等等;它們都是單入口的形式,也就是說所有的請求都集合到index.php中,然后再由框架核心來根據(jù)請求參數(shù)的不同來分配到不同的控制器當中。基于單入口的形式,那么就可以做基于行為(例如TP3.2)或者說基于事件的定時任務。
系統(tǒng)自動的定時任務,比如Linux的crontab,windows的計劃任務等。
兩中方法各有所長各有所短
基于事件:這種利用的是框架本身提供的一些行為來實現(xiàn),優(yōu)點是:不需要特殊配置,只要項目能跑起來,那么定時任務也能執(zhí)行。缺點是:靈活性比較差,必須要借助框架實現(xiàn)。
基于系統(tǒng):基于操作系統(tǒng)來實現(xiàn),優(yōu)點是:靈活性很高,而且可控性也很好。缺點是:需要特殊配置,專業(yè)要求性比較強。
具體要使用哪種方法,可以依據(jù)自己的能力和項目需要來選擇。最后附上TP3.2的定時任務配置,這個只需要配置就可以,如果想查看具體實現(xiàn)原理,可以查看/ThinkPHP/Library/Behavior/CronRunBehavior.class.php
第一步:/Application/Common/Conf目錄下新建兩個文件:
分別如:
/Application/Common/Conf/tags.php
/Application/Common/Conf/crons.php
1)?新建?tags.php,編輯內(nèi)容如下:
return?array(
'app_end'?=?array('Behavior\CronRunBehavior'),
);
2)?新建?crons.php?,編輯內(nèi)容如下:
return?array(
'cron_1'?=?array('myplan',?1),
);
第二步:/Application/目錄下新建?Cron文件夾,里面新建文件myplan.php文件
路徑如:/Application/Cron/myplan.php
編輯內(nèi)容如下:
echo?11111;
查看是否運行成功,最簡單的方法是查看/Application/Runtime/~crons.php,這個文件是否存在。
本教程使用的定時任務基于EasyTak,EasyTask官方文檔:
(1).安裝tp6
(2).安裝定時任務composer包
(3).創(chuàng)建命令行處理類文件
會生成文件:tp\app\command\Task.php
將Task.php文件內(nèi)容修改如下:
(4).配置tp\config\console.php文件
(5).執(zhí)行命令(windows請使用cmd):
添加一個全局應用程序類,在里面添加如下代碼:
void Application_Start(object sender, EventArgs e) {
Timer t = new Timer(3000); //每隔3秒
t.Enabled = true;
t.AutoReset = true;
t.Elapsed += new ElapsedEventHandler(aaa);
GC.KeepAlive(t);
}
//把下面方法中改成你的數(shù)據(jù)庫操作即可
public void aaa(object sender, ElapsedEventArgs e)
{ FileStream fs = new FileStream("d://a.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(DateTime.Now);
sw.Close();
fs.Close();
}
可以,第一種:可以在服務器上寫一個定時任務,每隔一段時間調(diào)用一個插入數(shù)據(jù)接口。
第二種:foreach里面寫sleep(1);暫停
怎么在thinkphp添加數(shù)據(jù)時獲取自動增長的id?
下面是TP5的方法,TP3的在添加后變量直接就獲取了。添加數(shù)據(jù)后如果需要返回新增數(shù)據(jù)的自增主鍵,可以使用 getLastInsID 方法:
Db::name('user')-insert($data);
$userId = Db::name('user')-getLastInsID();或者直接使用 insertGetId 方法新增數(shù)據(jù)并返回主鍵值:
Db::name('user')-insertGetId($data);
ThinkPHP
ThinkPHP是一個免費開源的,快速、簡單的面向?qū)ο蟮妮p量級PHP 開發(fā)框架,遵循?Apache2 開源協(xié)議發(fā)布,是為了簡化企業(yè)級應用開發(fā)和敏捷WEB應用開發(fā)而誕生的。
基本特性
簡單易用的MVC模式 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
模型(M):模型的定義由Model類來完成。Model類位于項目目錄下面的LibModel目錄。
控制器(C):應用控制器(核心控制器)和Action控制器都承擔了控制器的角色,區(qū)別在于Action控制器完成業(yè)務過程,而應用控制器(App類)負責調(diào)度控制。Action控制器位于項目目錄下面的LibAction目錄。
視圖(V):模板的實現(xiàn)是和框架無關的,做到了100%分離,可以獨立預覽和制作。模板目錄位于項目目錄下面的Tpl目錄。
2.獨創(chuàng)的核心編譯和二分法項目編譯機制
ThinkTemplate是一個使用了XML標簽庫技術的編譯型模板引擎,支持兩種類型的模板標簽,使用了動態(tài)編譯和緩存技術,而且支持自定義標簽庫。