CLI模式使用说明

DoitPHP的CLI模式是指DoitPHP在命令行下运行。由于在命令行下,即不支持$_POST,也不支持$_GET等,所以注定了CLI模式下运行DoitPHP框架编写的程序有所不同。

首先、入口文件内容不一样。非CLI模式运行下的入口文件(默认index.php)的代码内容为:

define('IN_DOIT', true);

/**
 * 定义项目所在路径(根目录):APP_ROOT
 */
define('APP_ROOT', dirname(__FILE__));

/**
 * 加载DoitPHP框架的初始化文件,如果必要可以修改文件路径
 */
require_once APP_ROOT . '/doitphp/DoitPHP.php';

$config = APP_ROOT . '/application/config/application.php';

/**
 * 启动应用程序(网站)进程
 */
Doit::run($config);

而CLI模式下的入口文件,内容为:

define('IN_DOIT', true);

/**
 * 定义项目所在路径(根目录):APP_ROOT
 */
define('APP_ROOT', dirname(__FILE__));

/**
 * 加载DoitPHP框架的初始化文件,如果必要可以修改文件路径
 */
require_once APP_ROOT . '/doitphp/DoitPHP.php';

$config = APP_ROOT . '/application/config/application.php';

/**
 * 启动应用程序(CLI)进程
 */
Doit::execute($config);

由上面两个文件的代码可以看出,在非CLI模式运行下的入口文件,启动应用时的代码是:Doit::run($config); 而CLI模式下启动应用时的代码是:Doit::execute($config);

其次,获取参数时的类方法不同。在非CLI模式运行下的文件在获取请求参数时,使用$this->post(), $this->get(),或$this->getParams(),而在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里调用。

举例说明

例一、

public function indexAction() {
    
    $name = $this->getCliParams('name');

    echo 'The name is:', $name;
}

使用 php -f 项目入口文件路径 Controller名称 Action名称 --name=doitphp 这个命令访问时,看下上面的程序执行是否正常。