服务热线 400-660-8066

天津网站建设
首页 站内资讯

天津网站建设

站内资讯
天津网站建设 / 站内资讯 / 产品资讯 / 正文

PHP网站建设之定制执行任务

来源: All文章
发布时间:2023-06-14 09:31:19

  大部分情况下我们更新处理数据都是在触发事件的时候去执行它,但是有的时候我们需要无人值守的情况下,定时的去执行一些任务,就想闹钟一样,由程序去执行任务。

  下面实现定时执行的代码:

  定时任务辅助类

  ClassTimingAuxiliary

  classTimingAuxiliary{

  public$dir='/Timing';//定时执行器所在的文件目录

  public$url;//要执行的链接地址

  public$startFileName;//开关文件路径

  public$interval;//间隔时间

  public$protocol;//链接协议

  publicfunction__construct($url,$startFileName,$interval,$protocol='http://',$dir=''){

  //验证值

  if(!$url||!$startFileName||!$interval){

  return'请指定完整的数据';

  }

  $this-url=$url;

  $this-startFileName=$startFileName;

  $this-interval=$interval;

  $this-protocol=$protocol;

  $this-dir=$dir?$dir:$this-dir;

  }

  /**

  *访问执行

  *@returnmixed

  */

  publicfunctionrun(){

  $url=$this-protocol.$_SERVER['SERVER_NAME']..$this-dir./TimingRun.php?url=.urlencode($this-url).'file='.urlencode($this-startFileName).'interval='.$this-interval;

  $hander=curl_init();

  curl_setopt($hander,CURLOPT_URL,$url);

  curl_setopt($hander,CURLOPT_RETURANSFER,1);

  curl_setopt($hander,CURLOPT_HEADER,0);

  curl_setopt($hander,CURLOPT_TIMEOUT,20);

  $result=curl_exec($hander);

  return$result;

  }

  }

  *定时处理类Timing.class.ph

  classTiming{

  public$interval=1;//间隔时间

  public$startFileName=timing_stop.txt;//停止文件,填写其完整路径

  public$url='';//需要定时执行的地址

  /**

  *@param$url

  *@paramstring$startFileName

  *@paramint$interval

  */

  publicfunction__construct($url,$startFileName='',$interval=0){

  $this-url=$url;

  $this-startFileName=$startFileName?$startFileName:$this-startFileName;

  $this-interval=$interval?$interval:$this-interval;

  }

  /**

  *执行调用

  *@returnstring

  */

  publicfunctionrun(){

  //判断是否指定了url

  if(!$this-url){

  return'url必须指定';

  }

  $stopfile=fopen($this-startFileName,a);//初始生成文件

  $result=地址:.$this-url.启动成功|占内存:.memory_get_usage().\r\n;

  fwrite($stopfile,$result);

  fclose($stopfile);

  ignore_user_abort();//即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.

  set_time_limit(0);

  $interval=$this-interval;

  $start=file_exists($this-startFileName);

  do{

  //curl比file_get_contents性能要高

  $hander=curl_init();

  curl_setopt($hander,CURLOPT_URL,$this-url);

  curl_setopt($hander,CURLOPT_RETURANSFER,1);

  curl_setopt($hander,CURLOPT_HEADER,0);

  curl_setopt($hander,CURLOPT_USERAGENT,Mozilla/

  4.0(compatible;MSIE

  6.0;WindowsNT

  5.1;SV1;.NETCLR

  1.

  1.4322;.NETCLR

  2.0.50727));

  curl_setopt($hander,CURLOPT_TIMEOUT,30);

  curl_exec($hander);

  sleep($interval);

  $start=file_exists($this-startFileName);

  flush();//刷新输出缓冲

  }while($start);

  }

  }

  TimingRun.class.ph

  /**

  *中间调用器

  */

  header(Content-Type:text/html;charset=utf-8);

  error_reporting(E_ALL^E_NOTICE);

  include'Timing.class.php';

  //执行任务

  $url=urldecode($_GET['url']);

  $file=urldecode($_GET['file']);

  $interval=$_GET['interval'];

  $Timing=newTiming($url,$file,$interval);

  $Timing-run();

  这里是调用定时器,和处理的事件,这里只是向test.txt写入文字,最好是写录日志,可以查看定时器执行的状况;

  publicfunctiontimerun(){

  $curl=http://.$_SERVER['SERVER_NAME'].U('Crons/timecs');

  $file='log.txt';//删除即停止执行。此处路径默认为.'/Timing/'下的文件可以下成的实列化中定义

  import(Org.Util.TimingAuxiliary);

  $re=new\TimingAuxiliary($curl,$file,2);

  $re-run();

  }

  /**

  *定时执行的任务

  */

  publicfunctiontimecs(){

  $time=time();

  $fp=fopen('..'..'/Timing/test.txt','a');

  $content='这是我要写入的内容';

  $time=time();

  $re=fwrite($fp,$content.memory_get_usage().\r\n);

  }

  最后只要运行timerun()然后关掉就可以了

* 文章来源于网络,如有侵权,请联系客服删除处理。
在线 咨询

添加动力小姐姐微信

微信 咨询

电话咨询

400-660-8066

我们联系您

电话 咨询
微信扫码关注动力小姐姐 X
qr