PHP定时任务

释放双眼,带上耳机,听听看~!

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

      如果需要用PHP定时执行某些任务的话, 可以有如下方法:
1、Linux下crontab, windows下计划任务
2、set_time_limit(0);
ignore_user_abort(true);
死循环

 

      第一种:crontab定期执行的php文件,一般需要有个表来记录每个任务的名称、当前进程ID、更新时间及进程开始ID 等信息。批处理过程包括:执行前准备、执行、执行后处理,整个处理过程可以利用OO思想来封装个批处理基类,每个批处理任务可以继承这个基类来实现数据的处理。

      第二种:通过访问此文件触发执行,存在Apache服务器重启后或机器重启(windows环境)后终止的问题。示例如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1ignore_user_abort(true);  // 设置关闭浏览器后也可执行
2set_time_limit(0);  // 设置相应时间无限制,原默认30s
3
4function write_txt()
5{
6   $filename = 'test.txt';
7   if (!file_exists($filename))
8   {
9       $fp = fopen($filename, 'w');
10      fclose($fp);
11  }
12 
13  $fp = fopen($filename, 'r+');
14  $str = file_get_contents($filename);
15  $str .= date('Y-m-d H:i:s')."\r\n";
16  fwrite($fp, $str);
17  fclose($fp);
18}
19
20function do_cron()
21{
22  write_txt();
23  sleep(30);
24}
25
26while (1)
27{
28  do_cron();
29}
30

 connection_aborted() — 检查客户端是否已经断开 断开则返回1,否则返回0
connection_status — 返回连接的状态位 0 – NORMAL(正常); 1 – ABORTED(异常退出); 2 – TIMEOUT(超时)

 

参考文章 :http://us2.php.net/manual/zh/index.php

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

给TA打赏
共{{data.count}}人
人已打赏
安全技术

C++ 中 struct和class 的区别

2022-1-11 12:36:11

安全经验

Apache Tomcat 重要安全修复:CVE-2013-4444

2014-9-11 11:12:22

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索