首页 > 编程知识 正文

php实现计划任务的实例讲解(php实现计划任务的实例讲解教程)

时间:2023-12-05 14:04:52 阅读:312263 作者:ZFNE

本文目录一览:

  • 1、php discuz的定时任务是什么原理怎么实现的?求高手解答
  • 2、php定时执行任务的几个方法
  • 3、Windows中使用计划任务自动执行PHP程序实例

php discuz的定时任务是什么原理怎么实现的?求高手解答

php中定时计划任务的实现原理:

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限时,TIMEOUT 状态的标记将被打开。

示例代码:

?php

ignore_user_abort(true);set_time_limit(0);

date_default_timezone_set('PRC'); // 切换到中国的时间

$run_time = strtotime('+1 day'); // 定时任务第一次执行的时间是明天的这个时候

$interval = 3600*12; // 每12个小时执行一次

if(!file_exists(dirname(__FILE__).'/cron-run')) exit(); // 在目录下存放一个cron-run文件,如果这个文件不存在,说明已经在执行过程中了,该任务就不能再激活,执行第二次,否则这个文件被多次访问的话,服务器就要崩溃掉了

do {

if(!file_exists(dirname(__FILE__).'/cron-switch')) break; // 如果不存在cron-switch这个文件,就停止执行,这是一个开关的作用

$gmt_time = microtime(true); // 当前的运行时间,精确到0.0001秒

$loop = isset($loop) $loop ? $loop : $run_time - $gmt_time; // 这里处理是为了确定还要等多久才开始第一次执行任务,$loop就是要等多久才执行的时间间隔

$loop = $loop 0 ? $loop : 0;

if(!$loop) break; // 如果循环的间隔为零,则停止

sleep($loop);

// ...

// 执行某些代码

// ...

@unlink(dirname(__FILE__).'/cron-run'); // 这里就是通过删除cron-run来告诉程序,这个定时任务已经在执行过程中,不能再执行一个新的同样的任务

$loop = $interval;

} while(true);

php定时执行任务的几个方法

PHP定时执行的三种方式实现

1、windows 的计划任务 2、linux的脚本程序 3、让web浏览器定时刷新

具体实现

1、windows计划任务

PHP很少在win服务器上跑,具体实现也不再深究,看网上实现的原理大概是写bat脚本,然后让window任务添加执行这个bat脚本。

2、linux 的脚本实现

这里主要使用到crontab这个命令,

使用方式 :

复制代码 代码如下:crontab filecrontab [ -u user ] [ -u user ] { -l | -r | -e }

说明 :

crontab是用来让使用者在固定时间或固定间隔执行程式之用

使用crontab写shell脚本,然后让PHP调用shell,这个是利用linux的特性,应该还不算PHP自身语言的特性

3、PHP实现定时执行计划任务

使用php让浏览器刷新需要解决几个问题

PHP脚本执行时间限制,默认的是30m 解决办法:set_time_limit();或者修改PHP.ini 设置max_execution_time时间(不推荐)

如果客户端浏览器关闭,程序可能就被迫终止,解决办法:ignore_user_abort即使关闭页面依然正常执行

如果程序一直执行很有可能会消耗大量的资源,解决办法使用sleep使用程序休眠一会,然后在执行

PHP定时执行的代码:

?php ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行. set_time_limit(3000);// 通过set_time_limit(0)可以让程序无限制的执行下去 $interval=5;// 每隔5s运行 //方法1--死循环 do{ echo '测试'.time().'br/'; sleep($interval);// 等待5s }while(true); //方法2---sleep 定时执行 require_once './curlClass.php';//引入文件 $curl = new httpCurl();//实例化 $stime = $curl-getmicrotime(); for($i=0;$i=10;$i++){ echo '测试'.time().'br/'; sleep($interval);// 等待5s } ob_flush(); flush(); $etime = $curl-getmicrotime(); echo 'hr'; echo round(($etime-stime),4);//程序执行时间

测试的时候发现这个效率并不是很高。

总结:

个人感觉PHP定时执行任务的效率不是很高,建议关于定时执行任务的工作还是交给shell来做吧。

Windows中使用计划任务自动执行PHP程序实例

所谓任务计划就是由计算机自动调用用户事先设置好的应用程序,从而达到简化用户操作的目的。利用Windows

2000的任务计划程序(相当与*NIX下的cron程序,这里不再对其详述),我们可以安排任何脚本、程序或文档在最恰当的时候运行,从而满足自己的需要。下面以Windows

2000为例。

具体来说,我们若需利用任务计划程序自动运行则应执行如下步骤:

单击"开始"按钮,然后依次选择"程序"→"附件"→"系统工具"→"任务计划"(或者是"设置"→"控制面板"→"任务计划"),启动Windows

2000的任务计划管理程序。

在"任务计划"窗口中双击"添加任务计划"图标,启动系统的"任务计划向导",然后单击"下一步"按钮,在给出的程序列表中选择需要自动运行的应用程序,然后单击"下一步"按钮。

设置适当的任务计划名称并选择自动执行这个任务的时间频率(如每天、每星期、每月、一次性、每次启动计算机时、每次登录时等),然后单击"下一步"按钮。

此时系统将会要求用户对程序运行的具体时间进行设置,如几号、几点钟、哪几个时间段才能运行等,我们只需根据自己的需要加以设置即可。

接下来系统将会要求用户设置适当的用户名及密码(如图5所示),以便系统今后能自动加以运行。

最后,我们只需单击"完成"按钮即可将相应任务添加到Windows

2000的任务计划程序中,此后它就会自动"记住"这个任务,一旦系统时间及相关条件与用户设置的计划相符,它就会自动调用用户所指定的应用程序,十分方

便(每次启动Windows

2000的时候,任务计划程序都会自动启动,并在后台运行,确保用户的计划能够按时执行)。

现在我们来测试一下刚才所建的任务是否成功,鼠标右键单击"php"程序图标(如图6所示),在弹出的菜单里面选择"运行"。一般情况下程序图标只要这样

激活运行就可以正常启动。如果运行失败可查看用户和密码是否设置正确,还有确定"Task

Scheduler"服务是否已启动,本人当初就是为了节省系统资源把它关掉了导致运行失败,害我找了大半天。另外也可从"系统日志"里查看到底是什么原

因造成运行失败的。

好了,讲了这么多任务计划的应用,现在我们切入正题,下面将介绍两个例子:

一、让PHP定时运行

编辑如下代码,并保存为test.php:

复制代码

代码如下:

?php

$fp

=

@fopen("test.txt",

"a+");

fwrite($fp,

date("Y-m-d

H:i:s")

.

"

让PHP定时运行吧!n");

fclose($fp);

?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。