PHP 计划任务的实现
来源:互联网 发布:黄钻空间域名 编辑:程序博客网 时间:2024/04/24 13:18
php计划任务的实现 (zt)
<?phpignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.set_time_limit(0); // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去$interval=60*5; // 每隔5分钟运行do{$fp = fopen('test.txt','a');fwrite($fp,'test');fclose($fp);sleep($interval); // 等待5分钟}while(true);?>
php定时计划任务介绍2010-05-06 10:10以前对se特别感兴趣,但是自己又不会java,lucene等搜索引擎开发工具,于是不断挖掘php的功效。
最后发现php也可以做抓取,并且原理很易:直接获取页面源文件,然后通过正则或字符串的参照截取来获取需要的信息。但是性能上不能和搜索引擎的多线程抓取相比。
实现了上一步之后,又思考着,如果抓取可以自动定时获取,那么人工运行可执行页面也就省下来了。
后来也在一些php开源程序中了解到关于"计划任务"的效果:可以定时运行某程序,比如数据库备份,更新缓存,生成静态页面,生成网站地图等。
最近由于项目需要定时更新远程数据库到本地,网上搜了搜,还真找到了。
ignore_user_abort();函数搭配set_time_limit(0);和sleep($interval);即可实现以上自动更新。
先给出一个基本的范式,其中有个人的测试程序:
<?phpignore_user_abort(); // run script in backgroundset_time_limit(0); // run script forever$interval=30; // do every 15 minutes...do{$fp = fopen('text3.txt','a');fwrite($fp,'test');fclose($fp);sleep($interval); // wait 15 minutes}while(true);?>
首先运行该程序,然后关闭该页面,程序仍然运行中,test会每隔30秒的填补到text3.txt文件。
实现效果如图:(略)
最后根据php手册简单介绍一些相关的知识:
1.连接处理:
在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:
0 - NORMAL(正常)
1 - ABORTED(异常退出)
2 - TIMEOUT(超时)
当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限时,TIMEOUT 状态的标记将被打开。
可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户端连接中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的"php_value ignore_user_abort"以及 ignore_user_abort() 函数来控制。如果没有告诉 PHP 忽略用户的中断,脚本将会被中断,除非通过 register_shutdown_function() 设置了关闭触发函数。通过该关闭触发函数,当远程用户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。
脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以通过设置 php.ini 的 max_execution_time 或 Apache .conf 设置中对应的"php_value max_execution_time"参数或者 set_time_limit() 函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调用 connection_status() 函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回 2。
需要注意的一点是 ABORTED 和 TIMEOUT 状态可以同时有效。这在告诉 PHP 忽略用户的退出操作时是可能的。PHP 将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数 connection_status() 返回 3。
2.相关函数:
int ignore_user_abort ( [bool setting] )This function sets whether a client disconnect should cause a script to be aborted. It will return the previous setting and can be called without an argument to not change the current setting and only return the current setting.int connection_aborted ( void )Returns TRUE if client disconnected.int connection_status ( void )Returns the connection status bitfield.
Linux 下有种更简单的方法,就是crontab命令
crontab命令的功能是在一定的时间间隔调度一些命令的执行。
crontab 使用方法: crontab [ -e | -l | -r ] 文件名 -e:编辑任务 -l:显示任务信息 -r:删除定时执行任务信息
crontab的格式:
* * * * * Command
分 时 日 月 星期 要运行的命令
crontab的例子:
*/5 * * * * lynx http://www.try2.org
每5分钟访问一次 www.try2.org
0 8 * * * lynx http://www.try2.org
每天早上8点访问 www.try2.org
0 10 6 * 1-5 lynx http://www.try2.org
每个月的6号和每个礼拜的星期一到星期五的早上10点访问 www.try2.org
0 5 7 8 * lynx http://www.try2.org
8月7日早上5点访问 www.try2.org
上面几个特殊的意思:
"*"代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。
- php计划任务的实现
- PHP 计划任务的实现
- php计划任务的实现
- php定时计划任务的实现原理
- php实现计划任务的实例讲解
- PHP计划任务的一种实现方法
- php定时计划任务的实现原理
- php计划任务php中的ignore_user_abort实现计划任务
- php计划任务php中的ignore_user_abort实现计划任务
- php计划任务php中的ignore_user_abort实现计划任务
- PHP使用任务计划实现定时任务
- PHP实现计划任务的几种方法
- 用php中的ignore_user_abort实现计划任务
- php定时计划任务实现方法
- 用 ignore_user_abort函数实现php计划任务
- php定时计划任务实现方法
- 使用php函数实现计划任务
- 在 PHP 上实现“计划与任务”
- 虚拟机刷固件须注意
- Java 重点
- PC-Lint的使用方法(一)
- iOS CoreData应用升级需要注意的地方
- 为Nautilus添加"Open Terminal Here"功能
- PHP 计划任务的实现
- ioremap返回的地址
- vi 替换时使用 "\("、"\)" 进行再组合
- android环境搭建
- server.mappath用法
- printf函数打印百分号
- static和const关键字尽可能多的作用
- ubuntu硬盘安装所需文件
- 解决Hibernate延迟加载出现的问题