zoukankan      html  css  js  c++  java
  • yaf中使用Cli模式,也就是定时器

    CLI 模式与 Web 模式的区别:

    • CLI 其输出没有任何头(Header)信息。
    • 出错时输出纯文本的错误信息(非 HTML 格式)。
    • 所有来自 print 和 echo 的输出将被立即写到输出端。而不作任何缓冲操作。
    • 最大运行时间(max_execution_time)被设置为无限值。
    • $argc$argv 两个变量总是存在。并且携带了参数个数与实际的参数数组值。
    • CLI SAPI 不会将当前目录改为已运行的脚本所在的目录。
    • CLI 模式提供了几个专用常量:STDIN、STDOUT、STDERR。

    如何使用?

    public下面放一个cli.php

    <?php
    /**
     * 命令行运行入口文件。
     */
    
    use fingerApp;
    
    error_reporting(0);
    define('TIMESTAMP', time());
    ini_set('default_socket_timeout', -1);
    define('APP_PATH', dirname(dirname(__FILE__)));
    
    require(APP_PATH . '/vendor/autoload.php');
    require(APP_PATH . '/config/api_constants.php');
    
    $app = new Yaf_Application(APP_PATH . "/config/api.ini", 'conf');
    // 根据是否存在 .env 进行配置文件的加载。
    if (file_exists('../.env')) {
        $cfgObj = new Yaf_Config_Ini('../.env', '');
        $config = $cfgObj->toArray();
    } else {
        $config = $app->getConfig()->toArray();
    }
    (new App($config));
    $app->bootstrap();
    
    
    if (!isset($argv[1])) {
        exit("Please enter the route to execute. Example: the php cli.php Index/Index!
    ");
    }
    
    $routeArr = explode('/', $argv[1]);
    if (count($routeArr) != 2) {
        exit("Please enter the route to execute. Example: the php cli.php Index/Index!
    ");
    }
    
    $controllerName = $routeArr[0];
    $actionName     = $routeArr[1];
    
    // 删除路由参数。
    unset($argv[0], $argv[1]);
    $params = [];
    if (isset($argv[2])) {
        parse_str($argv[2], $params);
    }
    
    $request = new Yaf_Request_Simple('CLI', 'Cli', $controllerName, $actionName, $params);
    Yaf_Application::app()->getDispatcher()->returnResponse(true)->dispatch($request);
    

    控制器位置

    判断是否是cli模式

    <?php
    /**
     * Cli 模式专用 Controller。
     */
    
    namespace Commoncontrollers;
    
    use fingerApp;
    use fingerCore;
    
    class Cli extends Common
    {
        /**
         * 重写父方法, Cli 模式关闭模板渲染。
         * @return void
         */
        public function init()
        {
            parent::init();
            $this->end();
            if (!App::isCli()) { // 非 CLI 模式运行则报错。
                Core::exception(STATUS_SERVER_ERROR, '不是 Cli 模式');
            }
        }
    }
    

    具体的控制器

    <?php
    /**
     * 短信定时器和常驻进程。
     */
    
    use ServicesSmsConsume;
    
    class SmsController extends CommoncontrollersCli
    {
        /**
         * 短信发送消费常驻进程。
         *
         * -- 进入项目根目录下的 public 文件夹,然后如下方式启动:
         * -- $ php cli.php Sms/send
         * 
         */
        public function sendAction()
        {
            echo "sms".PHP_EOL;
        }
    }
    

    操作

     /usr/local/php7.2/bin/php cli.php Sms/send
    
  • 相关阅读:
    arcgis要素折点转点
    arcgis问题数据判断
    arcgis根据位置信息查找一个点周围的线(根据交点,查找)
    GIS算法-最短路径-连通性-网络分析-路径规划
    Arcgis直连SQLServer数据库,通过REST修改数据ArcMap中更新数据库数据不更新,数据不统一
    None和NULL
    ArcPy属性查询
    WGS84转gcj02
    ArcGIS Server跨域
    MySQL中数据类型宽度有什么用, INT(11)有什么意义?
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/12111753.html
Copyright © 2011-2022 走看看