相思资源网 Design By www.200059.com

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

Application.php

<"content-type:text/html;charset=utf-8");
    self::register();
    self::commandLine();
    self::pathInfo();
  }
  //自动加载
  public static function loadClass($class){
    $class=str_replace('\\', '/', $class);
    $dir=str_replace('\\', '/', __DIR__);
    $class=$dir."/".$class.".php";
    require_once $class;    
  }
  //命令行下
  public static function commandLine(){
    if(php_sapi_name()=="cli"){
      $_SERVER['PATH_INFO']="";
      foreach ($_SERVER['argv'] as $k=>$v) {
        if($k==0) continue;
        $_SERVER['PATH_INFO'].="/".$v;
      }
    }
  }
  //pathinfo处理
  public static function pathInfo(){
    if(isset($_SERVER['PATH_INFO'])){
      $pathinfo=array_filter(explode("/", $_SERVER['PATH_INFO']));
      for($i=1;$i<=count($pathinfo);$i++){
        $key=isset($pathinfo[$i]) "";
        switch ($i) {
          case 1:
            $_GET['m']=ucfirst($key);
            break;
          case 2:
            $_GET['c']=ucfirst($key);
            break;
          case 3:
            $_GET['a']=$key;
            break;
          default:
            if($i>3){
              if($i%2==0){
                $_GET[$key]=$value;
              }
            }
            break;
        }
      }
    }
    $_GET['m']=!empty($_GET['m']) "\\Controller\\{$_GET['m']}\\{$_GET['c']}";
    $controller=new $class;
    $controller->$_GET['a']();
  }
  //致命错误回调
  public static function shutdownCallback(){
    $e=error_get_last();
    if(!$e) return;
    self::errorHandler($e['type'],'<font color="red">Fatal Error</font> '.$e['message'],$e['file'],$e['line']);
  }
  //错误处理
  protected static function myErrorHandler($errno,$errstr,$errfile,$errline){
    list($micseconds,$seconds)=explode(" ",microtime());
    $micseconds=round($micseconds*1000);
    $micseconds=strlen($micseconds)==1 "cli"){
      $break="\r\n";
    }else{
      $break="<br/>";
    }
    $mes="[".date("Y-m-d H:i:s",$seconds).":{$micseconds}] ".$errfile." ".$errline." line ".$errstr.$break;
    echo $mes;    
  }
  //注册
  public static function register(){
    error_reporting(0);
    set_error_handler(function($errno,$errstr,$errfile,$errline){
      self::myErrorHandler($errno,$errstr,$errfile,$errline);
    });
    register_shutdown_function(function(){
      self::shutdownCallback();
    });
    spl_autoload_register("self::loadClass");
  }
}

Application::main();

\Controller\Client\Cron.php

<"duration"=>5,"method"=>"doSomething"),
    array("duration"=>2,"method"=>"doSomething2"),
  );
  public function index(){
    while (true) {
      sleep(1);
      $this->second++;
      foreach($this->tasks as $task){
        if($this->second%$task['duration']==0){
          $this->$task['method']();
        }
      }
    }
  }
  public function doSomething(){
    echo "[".date("Y-m-d H:i:s",time())."] doSomething1 ok!\r\n";
  }
  public function doSomething2(){
    echo "[".date("Y-m-d H:i:s",time())."] doSomething2 ok!\r\n";
  }
}

效果:

方法doSomething每隔2秒执行一次

方法doSomething2每隔5秒执行一次

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

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

以上这篇PHP命令行执行整合pathinfo模拟定时任务实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

标签:
php,pathinfo

相思资源网 Design By www.200059.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
相思资源网 Design By www.200059.com

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

暂无PHP命令行执行整合pathinfo模拟定时任务实例的评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。