成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? PHP命令行執行整合pathinfo模擬定時任務實例
全站頭部文字 我要出現在這里
PHP命令行執行整合pathinfo模擬定時任務實例 640 2024-01-28   

命令行模式下,根據傳參,調用不同控制器。控制器中根據配置定時執行指定方法

Application.php

<?php
class Application{
  public static function main(){
    header("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]) ? $pathinfo[$i] : '';
        $value=isset($pathinfo[$i+1]) ? $pathinfo[$i+1] :"";
        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']) ? ucfirst($_GET['m']) : 'Index';
    $_GET['c']=!empty($_GET['c']) ? ucfirst($_GET['c']) : 'Index';
    $_GET['a']=!empty($_GET['a']) ? $_GET['a'] : 'index';
    $class="\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 ? '0'.$micseconds : $micseconds;
    if(php_sapi_name()=="cli"){
      $break="rn";
    }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();

ControllerClientCron.php

<?php
namespace ControllerClient;

class Cron{
  private $second=0;
  private $tasks=array(
    array("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!rn";
  }
  public function doSomething2(){
    echo "[".date("Y-m-d H:i:s",time())."] doSomething2 ok!rn";
  }
}

效果:

方法doSomething每隔2秒執行一次

方法doSomething2每隔5秒執行一次

現在執行其他方法是同步的,可以再優化成開新線程執行這些方法,就不會阻塞主線程的定時了

查看圖片

以上這篇PHP命令行執行整合pathinfo模擬定時任務實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持綠夏網。



主站蜘蛛池模板: hereweare| 小班安全开学第一课| 心跳源计划演员表| 真的爱你中文谐音歌词| 在线播放国内自拍情侣酒店| 查理和劳拉| 电视剧零下三十八度手机免费观看| 真实游戏完整版高清观看| 拿什么拯救你我的爱人演员表介绍| 男按摩师给女性做私密按摩| 莴笋是发物吗| 罪孽天使| 底线演员表全部演员介绍| 《西游降魔篇》2| 学霸考砸了被父母打的视频| 做菜的视频家常菜大全| 寡妇高潮一级毛片情欲小说| 色女孩视频| 诺拉·阿娜泽德尔| 六年级上册脱式计算题| 一个馒头引起的血案| 何丽萍| 摇曳山庄的幽灵| 押韵表实用大全| 李乃文电影| 国产精品久久久久精品三级ⅰ| 木乃伊5| 美女被吃| 绿门背后| 吴妍儿| 生物选择性必修三| 电影《追求》| 十大黄色软件推荐免费| 致命录像带| 语文选择性必修中册电子课本| 古天乐电影全部作品最新| 自拍成人| 3d成人国产同人动漫焰灵姬 | 我爱五指山我爱万泉河| 黄光亮| 父子刑警|

!!!站長長期在線接!!!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103