ThinkPHP如何使用cli模式
目录
和其他框架一样,ThinkPHP有人会提供除了web访问方式外,也提供里cli模式,即命令模式。 在需要做批处理、定时任务等场景里,通常使用cli模式,使得产品代码具有统一性,代码复用率高,开发效率更高。
基于ThinkPHP3.2版本的cli模式,步骤如下:
1、新增入口文件cli.php
复制框架文件中的入口文件index.php,改为cli.php作为cli模式下的入口文件,index.php文件仍然作为正常模式下的入口文件。
在新的入口文件cli.php加入常量APP_MODE,值为cli:
define(‘APP_MODE’,'cli');
2、解决引入路径问题
通常在cli模式下执行php脚本文件时,一般使用绝对路径去执行,这导致了执行脚本文件时,报错提示引入的/ThinkPHP/ThinkPHP.php文件与/Application/目录不存在,将引入时的相对路径更改为绝对路径:[cli.php中]
define( 'APP_PATH', dirname(__FILE__).'/Application/' );
require dirname( __FILE__).’/ThinkPHP/ThinkPHP.php';
3、新增cli模式下的通用配置
在ThinkPHP/Mode/目录下,复制common.php文件,改为cli.php,作为cli模式下的通用配置文件。
4、在cli模式下如何执行
手动执行:
php -f /var/www/html/myproject/cli.php Home/Index/GetUser/id/1
在cron定时任务中:
30 3 1 * * php -f /var/www/html/myproject/cli.php Home/Cache/Init
5、参数模式说明
5.1、普通参数模式,URL_MODE为0
在普通参数模式下面 ,我们需要这样调用模块和操作
php -f /var/www/html/cli.php module controller action id 4
5.2、PATHINFO模式,URL_MODE为1
在PATHINFO参数模式下面,我们可以这样调用模块和操作
php -f /var/www/html/myproject/cli.php Home/Index/GetUser/id/1
5.3、其他REWRITE或兼容模式
也可以采用PATHINFO的模式获取
6、如何获取参数
在5中已经说明了如何传参。这里说如何获取参数。 比如:
php -f /var/www/html/myproject/cli.php Home/Index/GetUser/id/1
在ThinkPHP中,通过以下方式可以获得id参数:
I("get.id");
以此类推。
7、其他
7.1、可能有些项目特殊场景下,需要删除runtime下的所有缓存文件。才能正常使用cli模式。
@tsingchan