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 这个命令访问时,看下上面的程序执行是否正常。