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

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

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

命令行模式下,根據(jù)傳參,調(diào)用不同控制器??刂破髦懈鶕?jù)配置定時執(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']();
  }
  //致命錯誤回調(diào)
  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模擬定時任務(wù)實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Apache無法自動跳轉(zhuǎn)卻顯示目錄的解決方法

    Apache無法自動跳轉(zhuǎn)卻顯示目錄的解決方法

    這篇文章主要為大家詳細(xì)介紹了Apache無法自動跳轉(zhuǎn)卻顯示目錄的解決方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    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權(quán)限控制類與用法示例

    thinkPHP5框架auth權(quán)限控制類與用法示例

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

    CodeIgniter中使用Smarty3基本配置

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

    php程序總是提示驗(yàn)證碼輸入有誤解決方案

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

    兴城市| 普格县| 青海省| 湖州市| 东平县| 崇义县| 辉县市| 崇阳县| 九江县| 海安县| 漯河市| 塘沽区| 英吉沙县| 涪陵区| 通化县| 彰化市| 清涧县| 乐业县| 龙江县| 德保县| 泗阳县| 杂多县| 婺源县| 玉溪市| 吐鲁番市| 巴南区| 府谷县| 台北县| 许昌市| 阆中市| 闻喜县| 大石桥市| 济宁市| 镇坪县| 白银市| 顺昌县| 崇阳县| 寿光市| 阳山县| 邵武市| 瑞安市|