-->

使用表达式引擎独立的PHP脚本(Standalone PHP script using Expres

2019-07-30 12:35发布

有没有一种方法,使一个脚本,在那里我可以做的东西一样$this->EE->db (即使用表达式引擎的类,例如访问数据库),但可以在命令行中运行?

我试图寻找它,但该文档似乎没有包含此信息(请纠正我,如果我错了 )。 我使用EE 2.4(上面的链接应该指向2.4文档)。

Answer 1:

下面的文章,似乎有一种可能的方法: 自举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调用索引方法,所以在添加一个索引方法做你所需要的。


Answer 2:

@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的需要,希望上述帮助别人。



Answer 3:

我发现@ Zenbuman的回答解决我自己的这个问题发生变化之后。 我的例子可以让你保持cron的脚本模块内,因此,如果你需要你的模块有一个cron功能它都撑整齐地打包在一起。 这里是我的博客的详细指南 。



文章来源: Standalone PHP script using Expression Engine