最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP命令行執(zhí)行整合pathinfo模擬定時任務實例

 更新時間:2016年08月12日 09:17:03   投稿:jingxian  
下面小編就為大家?guī)硪黄狿HP命令行執(zhí)行整合pathinfo模擬定時任務實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

命令行模式下,根據傳參,調用不同控制器??刂破髦懈鶕渲枚〞r執(zhí)行指定方法

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="\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

<?php
namespace Controller\Client;

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!\r\n";
  }
  public function doSomething2(){
    echo "[".date("Y-m-d H:i:s",time())."] doSomething2 ok!\r\n";
  }
}

效果:

方法doSomething每隔2秒執(zhí)行一次

方法doSomething2每隔5秒執(zhí)行一次

現(xiàn)在執(zhí)行其他方法是同步的,可以再優(yōu)化成開新線程執(zhí)行這些方法,就不會阻塞主線程的定時了

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

相關文章

  • phpstorm配置php運行環(huán)境的詳細步驟

    phpstorm配置php運行環(huán)境的詳細步驟

    這篇文章主要介紹了phpstorm配置php運行環(huán)境的詳細步驟,首先安裝phpstrom,按照提示的步驟一步一步來就行,文中給大家介紹了phpstorm的簡單配置,需要的朋友可以參考下
    2023-09-09
  • PHP中的使用curl發(fā)送請求(GET請求和POST請求)

    PHP中的使用curl發(fā)送請求(GET請求和POST請求)

    本篇文章主要介紹了PHP中的使用curl發(fā)送請求(GET請求和POST請求),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Yii2語言國際化自動配置詳解

    Yii2語言國際化自動配置詳解

    這篇文章主要介紹了Yii2語言國際化自動配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • yii2帶搜索功能的下拉框實例詳解

    yii2帶搜索功能的下拉框實例詳解

    帶搜索功能下拉框在項目中經常會用到,下面小編把實現(xiàn)代碼分享到腳本之家平臺,供大家參考
    2016-05-05
  • Apache無法自動跳轉卻顯示目錄的解決方法

    Apache無法自動跳轉卻顯示目錄的解決方法

    這篇文章主要為大家詳細介紹了Apache無法自動跳轉卻顯示目錄的解決方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 詳解PHP防止盜鏈防止迅雷下載的方法

    詳解PHP防止盜鏈防止迅雷下載的方法

    本篇文章主要介紹了詳解PHP防止盜鏈防止迅雷下載的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 淺談PHP Cookie處理函數(shù)

    淺談PHP Cookie處理函數(shù)

    下面小編就為大家?guī)硪黄獪\談PHP Cookie處理函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • thinkPHP5框架auth權限控制類與用法示例

    thinkPHP5框架auth權限控制類與用法示例

    這篇文章主要介紹了thinkPHP5框架auth權限控制類與用法,結合實例形式分析了thinkPHP5框架擴展auth權限控制類的定義與使用方法,代碼注釋中備有較為詳盡的使用說明與數(shù)據庫操作語句,需要的朋友可以參考下
    2018-06-06
  • CodeIgniter中使用Smarty3基本配置

    CodeIgniter中使用Smarty3基本配置

    這篇文章主要介紹了CodeIgniter中使用Smarty3基本配置,本文給出了創(chuàng)建類庫的方法和控制器中調用實例,這樣就可以完整的使用Smarty了,需要的朋友可以參考下
    2015-06-06
  • php程序總是提示驗證碼輸入有誤解決方案

    php程序總是提示驗證碼輸入有誤解決方案

    這篇文章主要介紹了php程序總是提示驗證碼輸入有誤解決方案,需要的朋友可以參考下
    2015-01-01

最新評論

体育| 常德市| 武宁县| 商洛市| 塘沽区| 永定县| 民权县| 沙洋县| 茌平县| 昌乐县| 福建省| 凌海市| 宿州市| 灵川县| 岑溪市| 咸宁市| 奉贤区| 莱西市| 洮南市| 阿图什市| 无极县| 白水县| 肇庆市| 临海市| 尉氏县| 灵石县| 比如县| 翁牛特旗| 德钦县| 叙永县| 达拉特旗| 车险| 康定县| 泊头市| 琼海市| 台东县| 滁州市| 乃东县| 深泽县| 临湘市| 吴桥县|