8.1 CLI模式使用说明
DoitPHP的CLI模式是指DoitPHP在命令行下运行。由于在命令行下,即不支持$_POST,也不支持$_GET等,所以注定了CLI模式下运行DoitPHP框架编写的程序有所不同。
首先、入口文件内容不一样。非CLI模式运行下的入口文件(默认index.php)的代码内容为:
use doitphp\App;
define('IN_DOIT', true);
/**
* 定义项目所在路径(根目录):APP_ROOT
*/
define('APP_ROOT', dirname(__FILE__));
/**
* 加载DoitPHP框架的初始化文件,如果必要可以修改文件路径
*/
require_once APP_ROOT . '/doitphp/App.php';
$configFile = APP_ROOT . '/application/config/application.php';
/**
* 启动应用程序(网站)进程
*/
App::run($configFile);
而CLI模式下的入口文件,内容为:
use doitphp\App;
define('IN_DOIT', true);
/**
* 定义项目所在路径(根目录):APP_ROOT
*/
define('APP_ROOT', dirname(__FILE__));
/**
* 加载DoitPHP框架的初始化文件,如果必要可以修改文件路径
*/
require_once APP_ROOT . '/doitphp/App.php';
$configFile = APP_ROOT . '/application/config/application.php';
/**
* 启动应用程序(CLI)进程
*/
App::execute($configFile);
由上面两个文件的代码可以看出,在非CLI模式运行下的入口文件,启动应用时的代码是:App::run($configFile);
而CLI模式下启动应用时的代码是:App::execute($configFile);
其次,获取参数时的类方法不同。在非CLI模式运行下的文件在获取请求参数时,使用$this->post(), $this->get(),或$this->request(),而在CLI模式下,获取参数时,仅$this->getCliParams()可以使用。
再次,访问网址不同(这是有用的废话,哈~),在非CLI模式运行下的文件访问网址为:http://yourdomains/index.php,而在CLI模式下入口文件调用则是:php -f 入口文件路径 controllername actionname。如:
/usr/local/php5/bin/php /www/htdocs/demo/cli.php controllername actionname
模式: php -f 项目入口文件(cli.php)路径 Controller名称 Action名称 --参数1=参数1值 --参数2=参数2值
除上面几处不同之外,在Controller文件,Model文件开发大都相同。在CLI模式下,视图功能比较要求就相对比较简单。大多CLI模式下运行的程序都是网站后台数据处理。一般情况下用在crontab里调用,或者deamon里调用。
举例说明:
例一、获取调用参数值
Controller文件代码如下:
public function indexAction() {
$name = $this->getCliParams('name');
echo 'The name is:', $name;
}
使用 php -f 项目入口文件路径 Controller名称 Action名称 --name=doitphp 这个命令访问时,看下上面的程序执行是否正常。