好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php定时执行任务实现方法详解 - php高级应用

php定时执行任务实现方法详解

每个PHP脚本都限制了执行时间,所以我们需要通过 set_time_limit 来设置一个脚本的执行时间为无限长,然后使用 flush() 和 ob_flush() 来清除服务器缓冲区,随时输出脚本的返回值,当我们执行后,每隔5秒钟,我们会得到一行 Hello World,代码如下:

header( "Content-Type: text/plain" );  set_time_limit(0);    $infoString  =  "Hello World"  .  "n" ;  while ( isset( $infoString ) )  { //开源代码phpfensi测试数据   echo   $infoString ;  flush ();  ob_flush();  sleep(5);  } 

例,代码如下:

<?php   ignore_user_abort();            // 即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.    set_time_limit(0);              // 执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去    $interval =20;                // 时间间隔 单位 秒    $key_file = "key.txt" ;           // 配置文件    if  (isset( $_GET [ 's' ]))   {      if  ( $_GET [ 's' ]== "0" ){         // 停止工作,但不退出         $s = "false" ;        echo   "Function is off" ;     }      elseif  ( $_GET [ 's' ]== "1" ){       // 工作         $s = "true" ;        echo   "Function is on" ;     }      elseif  ( $_GET [ 's' ]== "2" ){       // 退出         $s = "die" ;        echo   "Function exited" ;     }      else         die ( "Err 0:stop working 1:working 2:exit" );      $string  =  "<?phpn return " ".$s." ";n?>" ;     write_inc( $key_file , $string ,true);      exit ();   }   if ( file_exists ( $key_file )){      do {        $mkey  =  include   $key_file ;        if  ( $mkey == "true" ){           // 如果工作         /////////////////////  工作区间  //////////////////////////////////           $showtime = date ( "Y-m-d H:i:s" );          $fp  =  fopen ( 'func.txt' , 'a' );         fwrite( $fp , $showtime . "n" );         fclose( $fp );        ///////////////////////////////////////////////////////////////////        }        elseif  ( $mkey == "die" ){         // 如果退出           die ( "I am dying!" );       }       sleep( $interval );            // 等待$interval分钟      } while (true);   }   else       die ( $key_file . " doesn't exist !" );   function  write_inc( $path , $strings , $type =false)   {        $path =dirname( __FILE__ ). "/" . $path ;      if  ( $type ==false)        file_put_contents ( $path , $strings ,FILE_APPEND);      else         file_put_contents ( $path , $strings );   }   ?> 

个人觉得在php定时执行任务还是有点复杂并且不好使用,下面我来介绍在操作系统中计划任务来实现,在网上找了些WINDOWS执行PHP的计划任务的方法,有一个写得很全,可惜在我这竟然没通过,最后不得不综合各门派的方法,才能在我这运行成功.

1、写一个PHP程序,命名为test.php,内容如下所示:

<?php  $fp  =  fopen ( "test.txt" ,  "a+" );  fwrite( $fp ,  date ( "Y-m-d H:i:s" ) .  " 成功成功了!n" );  close( $fp );  ?> 

程序大胆地写,什么includerequire尽管用,都没问题.

2、新建Bat文件,命名为test.bat,内容如下所示:

D:phpphp.exe -q D:websitetest.php

相应目录自己改上.

3、建立WINDOWS计划任务:

开始–>控制面板–>任务计划–>添加任务计划,浏览文件夹选择上面的bat文件,设置时间和密码(登陆WINDOWS的)保存即可了.

4、over,可以右键计划任务点[运行]试试.

linux系统:

我们可以借助Linux的Crontab工具来稳定可靠地触发PHP执行任务,下面介绍Crontab的两种方法.

一、在Crontab中使用PHP执行脚本

就像在Crontab中调用普通的shell脚本一样,具体Crontab用法,使用PHP程序来调用PHP脚本.

每一小时执行myscript.php如下:

# crontab -e

2.00 * * * * /usr/local/bin/php /home/john/myscript.php

/usr/local/bin/php 

为PHP程序的路径.

二、在Crontab中使用URL执行脚本

如果你的PHP脚本可以通过URL触发,你可以使用lynx或curl或wget来配置你的Crontab,下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本,Lynx文本浏览器默认使用对话方式打开URL,但是,像下面的,我们在lynx命令行中使用-dump选项来把URL的输出转换来标准输出,代码如下:

1.00 * * * * lynx -dump /myscript.php

下面的例子是使用CURL访问URL来每5分执行PHP脚本,Curl默认在标准输出显示输出,使用"curl -o"选项,你也可以把脚本的输出转储到临时文件,代码如下:

1.*/5 * * * * /usr/bin/curl -o temp.txt /myscript.php

下面的例子是使用WGET访问URL来每10分执行PHP脚本,-q选项表示安静模式,"-O temp.txt"表示输出会发送到临时文件,代码如下:

1.*/10 * * * * /usr/bin/wget -q -O temp.txt /myscript.php

查看更多关于php定时执行任务实现方法详解 - php高级应用的详细内容...

  阅读:42次