3

有没有办法制作一个我可以做类似事情的脚本$this->EE->db(即使用表达式引擎的类,例如访问数据库),但可以在命令行中运行?

我尝试搜索它,但文档似乎不包含此信息(如果我错了,请纠正我)。我正在使用 EE 2.4(上面的链接应该指向 2.4 文档)。

4

3 回答 3

4

以下文章似乎有一种可能的方法:Bootstrapping EE for CLI Access

  • 复制您的 index.php 文件并将其命名为 cli.php。
  • 将 index.php 文件移到 DOCUMENT_ROOT 之外。现在,从技术上讲,这不是必需的,但是没有理由窥探你的辛勤工作,所以为什么不保护它。
  • 在 cli.php 中更新第 26 行的 $system_path 以指向您的系统文件夹。
  • 在 cli.php 中,将第 96 行的 $routing['controller'] 更新为 cli。
  • 在 cli.php 内部,将第 96 行的 APPPATH 更新为 $system_path.'cli/'。
  • 复制 system/expressionengine 目录并将其命名为 system/cli。
  • 复制 cli/controllers/ee.php 文件并将其命名为 cli/controllers/cli.php。
  • 最后,将 cli/controllers/cli.php 中的类名更新为 Cli 并删除方法。
  • 默认情况下 EE 调用 index 方法,所以添加一个 index 方法来做你需要的。
于 2012-07-20T03:09:00.937 回答
2

@Zenbuman 这是一个有用的起点,尽管我会补充说,我的所有请求都转到 cli-> index 时遇到问题,而我想要一些转到 cli->task1、cli->task2 等的请求

我必须更新 * system\codeigniter\system\core\URI.php * 以便它知道如何提取我通过命令行传递的参数,我从支持 CLI 的更新版本的 Codeigniter 获得以下代码

// 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 控制器中的 index 方法并忽略我的参数

/*
 *  ~ line 109 - 111 /cli.php
 * ---------------------------------------------------------------
 *  Disable all routing, send everything to the frontend
 * ---------------------------------------------------------------
 */
$routing['directory'] = '';
$routing['controller'] = 'cli';
//$routing['function'] = '';

甚至离开

$routing['function'] = '';

将强制请求转到索引控制器

最后我觉得这有点 hacky,但我真的需要在我的情况下使用 EE API 库。否则,我将使用 Codeigniter 创建一个单独的应用程序来处理我的 CLI 需求,希望以上内容对其他人有所帮助。

于 2013-04-25T14:17:19.197 回答
1

在解决了我自己的这个问题的变体后,我找到了@Zenbuman 的答案。我的示例允许您将 cron 脚本保存在模块中,因此如果您需要您的模块具有 cron 功能,则所有内容都可以整齐地打包在一起。这是我博客上的详细指南

于 2015-08-18T01:51:15.777 回答