博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
聊聊php定时计划任务
阅读量:7107 次
发布时间:2019-06-28

本文共 1277 字,大约阅读时间需要 4 分钟。

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倒是会好一点。

网上参考:


      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1369169,如需转载请自行联系原作者

你可能感兴趣的文章
客户区和非客户区
查看>>
Android调用相册拍照控件实现系统控件缩放切割图片
查看>>
【转】Excel2010中绘制流程图
查看>>
"无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开"解决办法...
查看>>
【原】oracle11G AWR使用及分析
查看>>
<20190104>关掉一些鸡肋的Win10功能
查看>>
iOS网络篇4-利用NSURLConnection实现GET/POST/HEAD请求
查看>>
linux 环境下 eas console的运行
查看>>
Rainbows! 4.4.3 发布,修复 EventMachine 问题
查看>>
USACO翻译:USACO 2012 JAN三题(2)
查看>>
Java学习之IO流总结
查看>>
LightOJ 1038 Race to 1 Again
查看>>
php set_magic_quotes_runtime() 函数过时解决方法
查看>>
使用IDEA创建java项目(hello word)
查看>>
TCP/IP协议栈---网络基础篇(3)
查看>>
What the f*ck JavaScript?
查看>>
Round Numbers(组合数学)
查看>>
用户登录体验之密码框设计
查看>>
Variational Inference for Crowdsourcing
查看>>
列表、字典、集合表达式
查看>>