php定时计划任务的解决办法
内容摘要
这篇文章主要为大家详细介绍了php定时计划任务的简单示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!根据php手册简单介绍一
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!根据php手册简单介绍一
文章正文
这篇文章主要为大家详细介绍了php定时计划任务的简单示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!
根据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.为了定时更新某一文件,需要程序自动运行,从网上搜到了两种方法:ignore_user_abort() 和crontabignore_user_abort()函数搭配set_time_limit(0)和sleep($interval)即可实现程序自动运行更新,下面是一个实例代码如下:
ignore_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);
只要运行上面的页面,然后关掉,程序就会一直运行下去。Linux 下有种更简单的方法,就是crontab命令 crontab命令的功能是在一定的时间间隔调度一些命令的执行。crontab 使用方法: crontab [ -e | -l | -r ] 文件名 -e:编辑任务 -l:显示任务信息 -r:删除定时执行任务信息crontab的格式:* * * * * Command分 时 日 月 星期 要运行的命令crontab的例子:*/5 * * * * lynx https://www.idcnote.com每5分钟访问一次 www.idcnote.com0 8 * * * lynx https://www.idcnote.com每天早上8点访问 www.idcnote.com0 10 6 * 1-5 lynx https://www.idcnote.com每个月的6号和每个礼拜的星期一到星期五的早上10点访问 www.idcnote.com0 5 7 8 * lynx https://www.idcnote.com8月7日早上5点访问 www.idcnote.com上面几个特殊的意思:"*"代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。
注:关于php定时计划任务的简单示例的内容就先介绍到这里,更多相关文章的可以留意
代码注释