ThinkPHP3.1.2 使用cli命令行模式运行

标签(空格分隔): php

前言

thinkphp3.1.2 需要使用cli方法运行脚本
折腾了一天才搞定
3.1.2的版本真的很古老

解决

  1. 增加cli.php入口文件

    define ('APP_NAME','App');
    define ('APP_PATH','./App/');
    define('APP_DEBUG', true);
    define('MODE_NAME','cli');
    require './Base/ThinkPHP.php'; 注意目录名称:根据实际去改
  2. cli.php文件增加解析模块、方法名、参数

    if (!isset($argv[1]) || !isset($argv[2])) {
    exit("格式错误: php cli.php module action {id 1}" . PHP_EOL);
    }
    # 'URL_MODEL'=>0, 的格式
    if ($argc > 3) {
    preg_replace('@(\w+),([^,\/]+)@e', '$_GET[\'\\1\']="\\2";', implode(',',array_slice($argv,3)));
    }
    $moduleName = $argv[1];
    $actionName = $argv[2];
    define('MODULE_NAME', $moduleName);
    define('ACTION_NAME', $actionName);
  3. 下载thinkphp3.1.2 扩展包 【推荐使用】

    http://www.thinkphp.cn/down/253.html

  4. 放到 /Base/Extend/

  1. 注释掉Log.class.php

  1. 扩展包解析命令行参数的逻辑

    if(C('URL_MODEL')==1) {// PATHINFO 模式URL下面 采用 index.php module/action/id/4
$depr = C('URL_PATHINFO_DEPR');
$path = isset($_SERVER['argv'][1])?$_SERVER['argv'][1]:'';
if(!empty($path)) {
$params = explode($depr,trim($path,$depr));
}
// 取得模块和操作名称
define('MODULE_NAME', !empty($params)?array_shift($params):C('DEFAULT_MODULE'));
define('ACTION_NAME', !empty($params)?array_shift($params):C('DEFAULT_ACTION'));
if(count($params)>1) {
// 解析剩余参数 并采用GET方式获取
preg_replace('@(\w+),([^,\/]+)@e', '$_GET[\'\\1\']="\\2";', implode(',',$params));
}
}else{// 默认URL模式 采用 index.php module action id 4
// 取得模块和操作名称
define('MODULE_NAME', isset($_SERVER['argv'][1])?$_SERVER['argv'][1]:C('DEFAULT_MODULE'));
define('ACTION_NAME', isset($_SERVER['argv'][2])?$_SERVER['argv'][2]:C('DEFAULT_ACTION'));
if($_SERVER['argc']>3) {
// 解析剩余参数 并采用GET方式获取
preg_replace('@(\w+),([^,\/]+)@e', '$_GET[\'\\1\']="\\2";', implode(',',array_slice($_SERVER['argv'],3)));
}
}

ThinkPHP3.1.2 使用cli命令行模式运行的更多相关文章

  1. ThinkPHP3.2.3使用cli命令行模式

    使用tp3.2.3的cli模式时,报错.加上绝对路径还是报错.所以采用普通模式 if(version_compare(PHP_VERSION,'5.3.0','<')) die('require ...

  2. jmeter命令行模式运行,实时获取压测结果

    jmeter命令行模式运行,实时获取压测结果 jmeter很小,很快,使用方便,可以在界面运行,可以命令行运行.简单介绍下命令行运行的方式: sh jmeter.sh -n -t my-script. ...

  3. 从命令行模式运行Windows管理工具。

    从命令行模式运行Windows管理工具. 分类: Play Windows 2004-08-06 16:39 6076人阅读 评论(3) 收藏 举报 1.可以直接在开始-〉运行里面输入的管理工具: 文 ...

  4. Jmeter使用非 GUI 模式,即命令行模式运行实例讲

    转载:http://www.cnblogs.com/leeboke/p/5238269.html 参考资料:https://girliemangalo.wordpress.com/2009/10/29 ...

  5. 命令行模式运行jmeter,主从方式运行jmeter

    jmeter很小,很快,使用方便,可以在界面运行,可以命令行运行.简单介绍下命令行运行的方式: sh jmeter.sh -n -t my-script.jmx -R 10.6.5.31,10.6.5 ...

  6. meter命令行模式运行,实时获取压测结果 (没试过 说不定以后要用)

    jmeter很小,很快,使用方便,可以在界面运行,可以命令行运行.简单介绍下命令行运行的方式 上面一条命令应该可以满足大部分需求. 使用-R指定节点时,当然要首先在这些节点上启动jmeter-serv ...

  7. 如何在CLI命令行下运行PHP脚本,同时向PHP脚本传递参数?

    <?php/* //命令行输入输出流fwrite(STDOUT,"Enter your name:"); $name = trim(fgets(STDOUT)); fwrit ...

  8. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

  9. PHP的CLI命令行运行模式浅析

    在做开发的时候,我们不仅仅只是做各种网站或者接口,也经常需要写一些命令行脚本用来处理一些后端的事务.比如对数据进行处理统计等.当然也是为了效率着想,当一个事务有可能会有较长的耗时时,往往会交由服务器的 ...

随机推荐

  1. Redis(9)——史上最强【集群】入门实践教程

    一.Redis 集群概述 Redis 主从复制 到 目前 为止,我们所学习的 Redis 都是 单机版 的,这也就意味着一旦我们所依赖的 Redis 服务宕机了,我们的主流程也会受到一定的影响,这当然 ...

  2. js 拖拽实现面向对象

    1.js 支持面向对象编程,但只是基于面向对象,不使用类或者接口.2.演变 工厂模式------->构造函数模式---------->原型模式 工厂模式的缺点: ①函数内部new ,不太符 ...

  3. Hadoop集群搭建(四)~centos6.8关闭防火墙

    一.centos关闭防火墙 1,关闭防火墙.service iptables stop 2,关闭防火墙开机自启.chkconfig iptables off 3,查看防火墙状态.service ipt ...

  4. consoleInfo 输出 数组套对象 不显示...的方法 序列化 再反序列化

    consoleInfo (...args) { // console.info('this', this) const name = this.$options.name let outName = ...

  5. Linux nginx安装步骤 centos7

    1.安装依赖: yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 2.创建一个文件夹cd /usr/localmk ...

  6. 强连通分量SCC 2-SAT

    强连通分量SCC 2-SAT 部分资料来自: 1.https://blog.csdn.net/whereisherofrom/article/details/79417926 2.https://ba ...

  7. 【攻防世界】open-source

    难度系数: 3.0 题目来源: Pediy CTF 2018 题目描述:菜鸡发现Flag似乎并不一定是明文比较的 先用:PE查壳,发现没有

  8. Django模型层ORM学习笔记

    一. 铺垫 1. 连接Django自带数据库sqlite3 之前提到过Django自带一个叫做sqlite3的小型数据库,当我们做本地测试时,可以直接在sqlite3上测试.不过该数据库是小型的,在有 ...

  9. 拜托,别再问我什么是 B+ 树了

    前言 每当我们执行某个 SQL 发现很慢时,都会下意识地反应是否加了索引,那么大家是否有想过加了索引为啥会使数据查找更快呢,索引的底层一般又是用什么结构存储的呢,相信大家看了标题已经有答案了,没错!B ...

  10. Convert JS object to JSON string

    Modern browsers (IE8, FF3, Chrome etc.) have native JSON support built in (Same API as with JSON2). ...