使用Expression Engine的独立PHP脚本

时间:2012-07-19 22:28:17

标签: expressionengine

有没有办法制作一个脚本,我可以做$this->EE->db之类的东西(即使用Expression Engine的类,例如访问数据库),但是可以在命令行中运行?

我尝试搜索它,但文档似乎不包含此信息(请correct me if I'm wrong)。我正在使用EE 2.4(上面的链接应该指向2.4文档)。

3 个答案:

答案 0 :(得分: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调用索引方法,因此请添加索引方法以执行所需操作。
  •   

答案 1 :(得分:2)

@Zenbuman这是一个有用的起点,虽然我会补充说我的所有请求都有问题转到cli - >索引,而我想要一些转到cli-> task1,cli-> task2等

我必须更新* system \ codeigniter \ system \ core \ URI.php *以便它知道如何通过命令行提取我传递的参数,我从下面得到了以下代码Codeigniter的更新版本,支持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'] = '';

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

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

答案 2 :(得分:1)

在解决了我自己的问题后,我找到了@ Zenbuman的答案。我的示例允许您将cron脚本保留在模块中,因此如果您需要模块具有cron功能,则所有模块都将整齐地打包在一起。 Here's a detailed guide on my blog