利用PHP实现定时任务,利用php 实现定时任务简单实现 代码
linux下可以借助crontab+php的方式(Crontab是一個很方便的在unix/linux系統上定時(循環)執行某個任務的程序 )
windows 下有兩種方式:
借助于vbscript腳本加載無窗口的服務
view plaincopy to clipboardprint?
1.do
2.set ws=createobject("wscript.shell")
3.ws.run"D:\php\php.exe D:\php\source\do.php",vbhide
4.wscript.sleep 5000 '毫秒
5.loop
新建文本文件,復制以上腳本,另存為后綴為*(.vbs)的文件后即可。
上面“D:\php\php.exe D:\php\source\do.php” 這種方式可以寫在bat文件中,或者window計劃任務中都可以執行。
php內部支持的一種利用函數“ignore_user_abort ” 來永久執行的方案。
view plaincopy to clipboardprint?
1.''<?php
2.ignore_user_abort(); // run script in background
3.set_time_limit(0); // run script forever
4.$interval=30; // do every 30 seconds...
5.do{
6.$fp = fopen('text3.txt','a');
7.fwrite($fp,'test');
8.fclose($fp);
9.sleep($interval); // wait 30 seconds
10.}while(true);
11.?>''
第三種方案,需要總是執行腳本,而且響應請求的時間是無限制的,對于定義了最大響應時間的fastcgi方式不可行,腳本還是會停止。所以需要找一種更加穩妥的方案。
**找到了**
數學是很神奇的東西。實際上定時執行,是一個時間條件執行,php中有取得時間秒數的函數time() 返回據1970年1月1日開始的秒數,而我們通常定時任務執行,可以使300秒,1000秒之類的時間間隔,意味著 。這個就好處理了,time()%timestamp==0 只要整除到了符合間隔的時間,就執行一次,恰好符合了定時的目的。
實際上最后一種簡單實現,解決的是普通請求中腳本定時任務的問題,這里會受到響應時間的限制,想讓這部分代碼執行的更久一下可以參考ignore_user_abort和set_time_limit,如果需要大運算量的處理,就需要借助前面介紹的方式在服務器端控制定時任務了,但作為普通需求,最后一種方案是一種簡單直接的實現,有一定意義!
來自:http://develop.9he.info/php/%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0
其它方法:
下面的這段代碼,可以在當前文件夾下,生成一個test.txt,并每隔20秒,往里面寫入一個時間戳,無論客戶端是否關閉瀏覽器。
view plaincopy to clipboardprint?
1.ignore_user_abort(true);
2.set_time_limit(0);
3.
4.function write_txt(){
5.if(!file_exists(”test.txt”)){
6.$fp = fopen(”test.txt”,”wb”);
7.fclose($fp);
8.}
9.$str = file_get_contents(’test.txt’);
10.$str .= “"r"n”.date(”H:i:s”);
11.$fp = fopen(”test.txt”,”wb”);
12.fwrite($fp,$str);
13.fclose($fp);
14.}
15.
16.function do_cron(){
17.usleep(20000000);
18.write_txt();
19.}
20.
21.while(1){
22.do_cron();
23.}
關鍵的兩個函數:
ignore_user_abort(true),這個函數的作用是,無論客戶端是否關閉瀏覽器,下面的代碼都將得到執行。
set_time_limit(0),這個函數的作用是,取消php文件的執行時間,要是沒有這個函數的話,默認php的執行時間是30秒,也就是說30秒后,這個文件就say goodbay了。
總結
以上是生活随笔為你收集整理的利用PHP实现定时任务,利用php 实现定时任务简单实现 代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 旧Oppo A37m 五成新能卖多少钱?
- 下一篇: python2的input,关于pyth