后台任务在我们php编程中虽然用的不是很多甚至很多php程序员都没听过甚至觉得后台运行是不可能实现的,本人因为项目需求多次演变在这里分享给大家,本人第一次想实现后台运行是利用 方法二 在其执行完成后输出一段Js代码让页面再次执行,然后在服务器中打开该页面!以下实现方式除了方法一我不推荐使用外其他我在项目中都使用过!
方法一、php自带函数实现后台运行(不推荐使用,不太稳定而且弊端很多)
set_time_limit 允许运行的最长时间,0表示不限制
sleep 运行后延时多久在运行后面的代码
当我什么使用set_time_limit函数后将代码写在一个无限循环里面即可!
set_time_limit(0); while (true) { //php代码 sleep(10); //运行一次延时10秒后在执行下一次 }
方法二、写成网页浏览的形式打开即执行然后用http监控
HTTP监控本来是用来监控网站状态的,一次项目的时候无意将其做为了后台运行的方法;
HTTP监控会定期通过http协议(Get/Post)访问你要监控的页面,而每一次访问都会运行我们要执行的代码,如果运行时间比较长可以加入方法一的set_time_limit;
推荐2个Http监控网站:
1-阿里云监控(免费监控11个网站,多了收费,免费带短信提醒,个人推荐)
2-360云监控(http://jk.cloud.360.cn/Index/products) 不是很喜欢用360的产品
方法三、惰性运行
惰性也就是说每次网站运行都会运行那些被定义为后台任务的代码,Discuz开源系统就是用的这种方法,流量越大越任务越精准,我个人用此方法实现一般都是开发成一个全局插件来运行php任务脚本文件!
方法四、php Cli模式(推荐)
php Cli模式运行稳定超过70%的php程序员不知道此方法.本人一套php采集系统利于cli模式稳定运行半年,采集文章300+万;
当我们运行利于cli模式运行一个php文件之后会自动执行里面的代码,我们只需要将代码写成一个无限循环即可,不过最好在执行一次循环后加入sleep延时!
注意事项:
1、在无限循环中如果要载入文件必须用require_once或者include_once否则会出现重复函数或者类已经存在之类的错误!
2、如果在无限循环中想要后台操作退出循环可以创建一个文件,每次循环都先判断该文件是否存在,存在则运行代码,不存在则跳过代码,这样我们可以后台控制后台运行的启动与关闭!
原文地址:http://www.dmzshequ.com/thread-7434-1-1.html
原文地址:https://www.cnblogs.com/zhukung/p/10216770.html