有没有一种方法,使一个脚本,在那里我可以做的东西一样$this->EE->db
(即使用表达式引擎的类,例如访问数据库),但可以在命令行中运行?
我试图寻找它,但该文档似乎没有包含此信息(请纠正我,如果我错了 )。 我使用EE 2.4(上面的链接应该指向2.4文档)。
有没有一种方法,使一个脚本,在那里我可以做的东西一样$this->EE->db
(即使用表达式引擎的类,例如访问数据库),但可以在命令行中运行?
我试图寻找它,但该文档似乎没有包含此信息(请纠正我,如果我错了 )。 我使用EE 2.4(上面的链接应该指向2.4文档)。
下面的文章,似乎有一种可能的方法: 自举EE的CLI访问
- 复制你的index.php文件,并cli.php命名。
- 移动index.php文件的DOCUMENT_ROOT之外。 现在,从技术上讲,这不是必须的,但没有理由窥探的眼睛看到你的努力工作,为什么不保护它。
- 里面cli.php更新管线26 $ system_path指向您的系统文件夹。
- 内部cli.php更新$路由[“控制器”]上线96是CLI。
- 里面cli.php更新线路96的APPPATH为$ system_path.'cli /”。
- 复制系统/ expressionengine目录,并将它命名系统/ CLI。
- 复制CLI /控制器/ ee.php文件并将其命名为CLI /控制器/ cli.php。
- 最后,更新CLI /控制器/ cli.php类名是CLI和删除的方法。
- 默认情况下,EE调用索引方法,所以在添加一个索引方法做你所需要的。
@Zenbuman这是为出发点有用的,虽然我想补充我和我所有的要求去CLI问题 - >指数,而我想一些去CLI-> TASK1,CLI-> TASK2等
我不得不更新* 系统\笨\ SYSTEM \核心\ URI.php *,使其知道如何提取我是通过命令行传递参数,我得到了支持CLI中从一个较新版本的笨下面的代码
// Is the request coming from the command line?
if (php_sapi_name() == 'cli' or defined('STDIN'))
{
$this->_set_uri_string($this->_parse_cli_args());
return;
}
// Let's try the REQUEST_URI first, this will work in most situations
而且在同一个文件中创建函数
private function _parse_cli_args()
{
$args = array_slice($_SERVER['argv'], 1);
return $args ? '/' . implode('/', $args) : '';
}
也不得不注释掉我cli.php文件中的以下所有路由是要索引方法在我的CLI控制器和无视我的参数
/*
* ~ line 109 - 111 /cli.php
* ---------------------------------------------------------------
* Disable all routing, send everything to the frontend
* ---------------------------------------------------------------
*/
$routing['directory'] = '';
$routing['controller'] = 'cli';
//$routing['function'] = '';
即使在离开
$routing['function'] = '';
将强制要求去索引控制器
最后,我觉得这是一个有点哈克但我真的需要使用EE API库在我的情况。 否则,我会刚刚创建与笨单独的应用程序来处理我的CLI的需要,希望上述帮助别人。
我发现@ Zenbuman的回答解决我自己的这个问题发生变化之后。 我的例子可以让你保持cron的脚本模块内,因此,如果你需要你的模块有一个cron功能它都撑整齐地打包在一起。 这里是我的博客的详细指南 。