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命令
1
|
crontab
-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/
本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1369169,如需转载请自行联系原作者