继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

聊聊php定时计划任务

慕无忌1623718
关注TA
已关注
手记 193
粉丝 11
获赞 53

google百度了下,PHP任务大体上可以分为三类


1、服务器计划任务

WIN服务器可以直接使用定时任务执行相关的应用程序,LINUX服务器则可以通过在/etc/crontab里添加定时任务来实现。


2、通过死循环实现任务自动执行

建立一个程序文件页面,通过ignore_user_abort来设置关闭浏览器页面后仍可执行,那么,在运行该程序页面后,您所需要的任务计划便会一直自动执行。对于一般的PHP程序员来说,如果没有足够的把握,这种操作是不被允许的,因为死循环极容易使用服务器当机。


3、触发式定时任务

在我所了解的几套程序中,像Discuz、帝国CMS等等,均使用这种方式来完成系统的定时任务,相对前面的两种方法,这是最为安全和简单的。


Discuz:

在您设置的计划任务执行时刻,如果有人访问您的站点,计划任务才会执行;如果那个时刻没有人访问您的站点,一直到有人访问时才执行计划任务。





定时任务对于php来说一直都是很多朋友的一个难题,但却很多地方都遇到了。
比如说:
游戏开发程序中,每隔10分钟给玩家发兵一次
sns社区中每隔20秒检测一下是否有人给我发消息
自动采集程序,每隔5分钟采集一次最新内容
微博数据同步,每隔10个小时通过微博api接口同步一次用户数据
……

大概有那么几种方法:
1.Linux系统
定时直接可以用cron来执行一个php脚本 或者其他语言的脚本[你要有足够的系统权限]
执行编辑cron命令

1crontab-e

比如每隔5分钟执行下 /root/bin目录下的test.php脚本

*/5 * * * * php /root/bin/test.php

2.windows系统
可用计划任务执行脚本,不举例





PHP的实现决定了它没有Java和.Net这种AppServer的概念, 而http协议是一个无状态的协议, php只能被用户触发, 被调用, 调用后会自动退出内存, 没有常驻内存, 就没有办法准确的定时处理

那么, 如果需要用PHP定时执行某些任务的话, 可以有以下几个方法:


1、Linux下crontab, windows下计划任务

2、找个被频繁调用的网页, 里面加上一个检测代码

3、set_time_limit(0);

ignore_user_abort(true);

死循环


第一种:方法是最常见的, 但也是最靠谱的,如果php服务器上没有权限去crontab, 也可以找一个自己的机器定期crontab去请求服务器

第二种:方法, 论坛上定时清理新帖基本上就是这么实现的, 如果人气不旺的话, 可以考虑去别的火爆点的论坛里面发个图片, 调用自己的php来实现一个trigger就好了。 Discuz!是判断在00:00之后,第一个执行者去执行的。

第三种:最不靠谱, Apache重启了就得重新访问,  fastcgi倒是会好一点。




网上参考:

http://blog.163.com/zbstrive_work@126/blog/static/165378687201141143512114/



打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP