前言:
cli模式,就是命令行形式执行php文件,不依赖nginx等服务。cli模式有几个好处,1是不会过期,不管执行多久都可以。2是简单,不用考虑nginx等服务器的配置等。那么平时大家都用框架写代码。要让你写原生连接数据库做点操作效率太低。下面就介绍下如何使用thinkphp5在cli模式下执行你写的方法。
本次测试框架版本:v5.1.37 LTS
简单介绍
其实thinkphp5手册有介绍这个功能,但是不知道为什么只有一小段介绍。首先来看原生的写法用cli模式来执行 新建一个index.php文件<?php
echo "hello world";
然后再用php命令去执行这个文件php index.php
就会得到输出hello world。非常的简单。那么用thinkphp5来做cli同样很简单。
1、首先需要在一个没有登录验证的控制器下创建一个方法。我们都知道我们往往在控制器或基类控制器的构造函数中写登录验证。所以我们
需要cli时,一定不能有登录验证。一般来说会专门写一个不需要登录验证的控制器。
2、在控制器里写一个方法,这个方法就是你需要执行的内容。由于在crontab中,最高频率也就是1分钟1次。但因为cli的特性。你可以在
方法里写死循环使用sleep来控制频率,可以做到5秒一次 10秒一次 都是可以的 我就写个简单的。public function test()
{
echo '233'.PHP_EOL;
}
3、执行这个方法。执行规则实际上和url访问的规则非常的类似。大家都知道框架有一个唯一入口index.php 虽然可以通过重写来隐藏,但是实际上还是访问的这个入口文件index.php,然后通过框架的机制引入和执行控制器里的方法。thinkphp5默认使用pathinfo的形式来访问。其实cli也是这个套路,执行index.php 跟上pathinfo路径就可以了
比如:php /你的项目地址/public/index.php index/index/test
其实就是php去执行你项目的入口文件,空格后面其实就是你的 模块/控制器/方法
那么有人可能会问了,那么开启了强制路由的怎么办?经过我今天的试验,强制路由同样适用这个规则。这么牛逼的功能不知道thinkphp团队为什么不好好介绍下php /你的项目地址/public/index.php test
空格后面就是你的路由地址。更为简单清晰
最后还补充个小提示,经过我测试,当开启路由模式去使用cli时,请求方式规定为get或者any的时候可以使用。当请求方式规定为post/put/delete时,则会报错,大家要注意哦。
thinkphp5的cli模式今天就介绍到这里。虽然简单,却很实用,欢迎交流,互相学习,感谢。
大部分原文转载自:https://blog.csdn.net/weixin_33670786/article/details/87007115