欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年08月12日 09:17:03   投稿:jingxian  
下面小編就為大家?guī)硪黄狿HP命令行執(zhí)行整合pathinfo模擬定時任務(wù)實例。小編覺得挺不錯的,現(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ù)實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • thinkphp驗證碼的實現(xiàn)(form、ajax實現(xiàn)驗證)

    thinkphp驗證碼的實現(xiàn)(form、ajax實現(xiàn)驗證)

    這篇文章主要介紹了thinkphp驗證碼的實現(xiàn)(form、ajax使用驗證)的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • 為百度UE編輯器上傳圖片添加水印功能

    為百度UE編輯器上傳圖片添加水印功能

    前些日子把phpcms的內(nèi)置編輯器改成了百度UE編輯器,非常好用,但是有個地方不是很滿意,就是沒法給上傳的圖片加水印了,經(jīng)過一番研究終于實現(xiàn)了出來,分享給大家。
    2015-04-04
  • php中字符串和整數(shù)比較的操作方法

    php中字符串和整數(shù)比較的操作方法

    這篇文章主要介紹了php中字符串和整數(shù)比較的操作方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • 摘自織夢CMS中的圖片處理類

    摘自織夢CMS中的圖片處理類

    這篇文章主要介紹了摘自織夢CMS中的圖片處理類,通過面向?qū)ο蟮姆绞捷^為詳細(xì)的實現(xiàn)了php針對圖片的縮略圖生成及水印添加等操作技巧,非常具有實用價值,需要的朋友可以參考下
    2015-08-08
  • 阿里對象存儲OSS在laravel框架中的使用方法

    阿里對象存儲OSS在laravel框架中的使用方法

    今天小編就為大家分享一篇阿里對象存儲OSS在laravel框架中的使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • php中實現(xiàn)簡單的ACL 完結(jié)篇

    php中實現(xiàn)簡單的ACL 完結(jié)篇

    終于寫完了 呵呵 簡單的一個實現(xiàn),學(xué)習(xí)php的朋友可以參考下。
    2011-09-09
  • 快速開發(fā)一個PHP擴(kuò)展圖文教程

    快速開發(fā)一個PHP擴(kuò)展圖文教程

    作者:heiyeluren本文通過非??焖俚姆绞街v解了如何制作一個PHP 5.2 環(huán)境的擴(kuò)展(PHP Extension),希望能夠在圖文的方式下讓想快速學(xué)習(xí)的朋友了解一下制作過程。
    2008-12-12
  • laravel 實現(xiàn)劃分admin和home 模塊分組

    laravel 實現(xiàn)劃分admin和home 模塊分組

    今天小編就為大家分享一篇laravel 實現(xiàn)劃分admin和home 模塊分組,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • windows的文件系統(tǒng)機(jī)制引發(fā)的PHP路徑爆破問題分析

    windows的文件系統(tǒng)機(jī)制引發(fā)的PHP路徑爆破問題分析

    這篇文章主要介紹了windows的文件系統(tǒng)機(jī)制引發(fā)的PHP路徑爆破問題分析,需要的朋友可以參考下
    2014-07-07
  • Django 中 cookie的使用

    Django 中 cookie的使用

    Cookie是瀏覽器在客戶端留下的一段記錄,這段記錄可以保留在內(nèi)存或者硬盤上。Django里面,對cookie的讀取和設(shè)置很簡單。接下來通過本文給大家分享Django 中 cookie的使用,感興趣的朋友一起看看吧
    2017-08-08

最新評論