手机版

PHP命令行执行整合pathinfo模拟定时任务实例

时间:2021-09-07 来源:互联网 编辑:宝哥软件园 浏览:

命令行模式下,根据传参,调用不同控制器。控制器中根据配置定时执行指定方法

Application.php

?phpclass Application { public static function main(){ header(' content-type : text/html;charset=utf-8 ');self :寄存器();self :命令行();self :路径信息();} //自动加载公共静态函数load class($ class){ $ class=str _ replace(' \ \ ','/',$ class);$dir=str_replace('\\ ','/',_ _ DIR _ _);$class=$dir .'/'.$ class . PHP ';require _ once $ class} //命令行下公共静态函数命令行(){ if(PHP _ SAPI _ name()==' CLI '){ $ _ SERVER[' PATH _ INFO ']=' ';foreach($ _ SERVER[' argv ']为$ k=$ v){ if($ k==0)继续;$_SERVER['PATH_INFO'].='/'.五美元;} } } //pathinfo处理公共静态函数PathInfo(){ if(已设置($ _ SERVER[' PATH _ INFO '])){ $ PathInfo=array _ filter(explode('/',$ _ SERVER[' PATH _ INFO ']));for($ I=1;$ I=计数($路径信息);$i ){ $key=isset($pathinfo[$i])?$路径信息[$ I]: " ";$ value=isset($ path info[$ I ^ 1])?$路径信息[$ I 1]: " ";switch($ I){ case 1: $ _ GET[' m ']=ucfirst($ key);打破;case 2: $ _ GET[' c ']=UC first($ key);打破;case : $ _ GET[' a ']=$ key;打破;默认值: if($ i3){ if($ I % 2==0){ $ _ GET[$ key]=$ value;} } break} } $_GET['m']=!空($_GET['m'])?ucfirst($ _ GET[' m ']):“Index”;$_GET['c']=!空($_GET['c'])?UC first($ _ GET[' c ']):“Index”;$_GET['a']=!空($_GET['a'])?$ _ GET[' a ']:“索引”;$ class=' \ \ Controller \ \ { $ _ GET[' m ']} \ \ { $ _ GET[' c ']} ';$ controller=新的$类;$ controller-$ _ GET[' a ']();} //致命错误回调公共静态函数shutdocallback(){ $ e=error _ get _ last();if(!$e)返回;self :错误处理程序($ e[' type '],' font color='red '致命错误/font ` .$e['message'],$e['file'],$ e[' line ']);} //错误处理受保护的静态函数myErrorHandler($errno,$errstr,$errfile,$errline){ list($micseconds,$seconds)=explode(',micro time());$ mics秒=回合($ mics秒* 1000);$ mics秒=strlen(中等收入国家)秒)=1?0'.$ mics秒: $秒;if(PHP _ SAPI _ name()==' CLI '){ $ break=' \ r \ n ';} else { $ break=' br/';} $ mes="[" .日期(' Y-m-d H:i:s ',$秒)。': { $mic秒}]' .$errfile .线$errstr .$ breakecho $ mes} //注册公共静态函数寄存器(){ error _ reporting(0);set_error_handler(函数($errno,$errstr,$errfile,$ errline){ self :3360 yerrorhandler($ errno,$errstr,$errfile,$ errline);});register _ shut down _ function(function(){ self :3360 shut down back();});spl _ autoload _ register(' self :加载类');} }应用程序: main();\控制器\客户端\Cron.php

?phpnamespace控制器\客户端;类cron { private $ second=0;private $ tasks=array(array(' duration '=5,' method '=' DosMeming '),array('duration'=2,' method '=' DosMeming '),);公共函数索引(){ while(true){ sleep(1);$这-秒;foreach($ this-tasks as $ task){ if($ this-second % $ task['工期]==0){ $this-$task['方法']();} } } }公共函数dosometing(){ echo '[' .日期(' Y-m-d H:i:s ',时间())。]做点什么一好的!\ r \ n ';} public function do something(){ echo '[' .日期(' Y-m-d H:i:s ',时间())。]做点什么2好的!\ r \ n ';}}效果:

方法做点什么每隔2秒执行一次

方法做点什么2每隔5秒执行一次

现在执行其他方法是同步的,可以再优化成开新线程执行这些方法,就不会阻塞主线程的定时了

上面的PHP命令行执行集成pathinfo模拟计时任务的例子是边肖与大家分享的全部内容。希望能给大家一个参考,多支持我们。

版权声明:PHP命令行执行整合pathinfo模拟定时任务实例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。