1、业务需求
需要实现这样一个功能:在第三方授权的认证当中,在用户首次登录授权我们会得到一个access_token,有效期为25小时,还会得到一个refresh_token,有效期为30天。
我们只要保存好这个refresh_token,在30天内我们都可以用这个refresh_token去请求一个api,他会返回一个新的access_token。这样我们只需要让用户授权一次,我们就可以获得长达30天的一个授权期限。
这里可以分为几个点:
<1>这个应该是要定期执行的一个任务。
25小时才会过期,那么我们12小时刷一次就足够了,并不需要很频繁的刷新。假设这样一种情况:让一个页面持续的运行,用一个while的死循环去执行一个任务,执行完之后sleep很长一段时间,然后再继续执行。这样做也是可以的,但是比较占资源。他执行的时间很少,等待的时间却很长,没必要这样一直等待。
<2>这个应该不需要是一个可以访问到的页面。
是我们内部执行的一个任务,不需要是人人可以访问到的一个页面。
<3>这个页面应该也要和框架融合在一起,可以访问到各种资源。
一个普通的php页面恐怕是不行的,我们需要跟框架融合的一个页面,需要可以访问到各种资源,比如说redis,比如说config,等等。
2、用cli模式运行codeigniter的页面
<1>cli的页面特性
什么是cli模式?就是命令行模式。我们可以不用url来访问php页面,而使用命令行来访问,这是可以的。
对页面来说,什么都不需要改变,比如:
>同样要是一个普通的controller,要继承自CI_Controller;
>要定义路由器,这个页面必须也是经由路由访问得到;
>甚至仍然可以添加这样的声明
defined('BASEPATH') OR exit('No direct script access allowed');
>可以通过添加一个判断让页面只能让cli访问:
public function __construct() { parent::__construct(); if (!is_cli()) exit("不正确的访问方式"); }
>通过echo打印在命令行上面,就如打印在页面上一样
<2>怎么通过命令行访问
cd E:/xxx/xxx/phpSite //网站的根目录,即index.php所在目录
php index.php aaa bbb ccc //即访问网址为yourdomain.com/index.php/aaa/bbb/ccc这样的地址注意:
>第一行是转到网站根目录这个路径;
>第二行php是调用了php.exe这个是因为我们有设置php的环境变量;
>index.php不可以缺少,因为这里我们没有走服务器了,没有经过服务器的url-rewrite,所以这个index.php是必不可少的。
我们可以将这两行代码放在一个文本文件里面,将名字改为refresh.bat,双击这个bat文件,他就会执行一次,相当于打开命令行来执行
新闻热点
疑难解答