网上搜索了一番,大致有以下两类:
1:配合使用ignore_user_abort()和set_time_limit(),使脚本脱离浏览器运行。
1 ignore_user_abort(); // 后台运行 2 set_time_limit(0); // 取消脚本运行时间的超时上限3 $interval=30;// 每隔30S运行,这个间隔时间是可以随着 需要进行修改 4 do{5 //抓取数据6 sleep($interval);7 }while(true);
非常的小巧精悍,即便浏览器关掉也能运行,可这是一个死循环,重启apache才能终止掉它。
改进:
1 (); 2 (0); 3 =30;4 6 7 (8 }($flag); //flag.php <?php return 1;?>
在do的时候引入flag.php文件,将其值赋予$flag,并作为判断循环的条件。
在服务器上测试过每隔一分钟执行一次,没什么问题,开心的把秒数改为一天,任务完成。
2:windows任务计划程序
打开任务计划程序->任务计划程序库->创建任务
取个名字,该勾选的勾选,来到触发器页面,新建
比如设置明天开始,每天9:00执行一次
确定,来到操作页面,新建
程序或脚本,选择要执行的bat文件,启始于(可选)填上bat文件所在的目录
这样,基本的设置就完成了!
然而...并没有...重点是bat文件
如果要定时执行某个php文件,bat文件里可以这么写
D:\php\php.exe -q D:\www\test.php
意思就是让php.exe去执行test.php这个文件。
然而...如此这般,我并不能调用框架里的CURD操作来整理我从接口获取的数据,
当然,用PDO链接数据库,再insert也可以,虽然比较麻烦。
不过,其实有更简单的方法。
也是用windows的任务计划程序,
不过不是执行php文件,而是让ie浏览器打开一个URL再关闭ie浏览器
在bat文件里这么写
@echo off
echo 正在关闭未关闭的IE进程,请稍等......
taskkill /f /im iexplore.exe
echo -------------开始运行指定的网页页面----------
::echo.&pause
start "" "C:\Program Files\Internet Explorer\iexplore.exe" http://xxx/xxxx.php
echo IE打开完成!
::echo.&pause
ping 127.0.0.1 -n 2
taskkill /f /im iexplore.exe
note:
ping 127.0.0.1 -n 2 这是等待时间。
参考文章:
http://blog.csdn.net/woshixuye/article/details/18050769
http://www.cnblogs.com/lcword/p/5634284.html
http://blog.csdn.net/happy_jijiawei/article/details/50813977
http://blog.csdn.net/skygreen_2001/article/details/7974245
https://www.cnblogs.com/huijiangzzy/p/7525351.html