【问题标题】:Codeigniter passing array to controller via CLICodeigniter 通过 CLI 将数组传递给控制器
【发布时间】:2013-03-19 14:47:32
【问题描述】:

我需要在命令行上运行我的 CI 脚本之一。我需要将一个数组传递给控制器​​,然后再传递给脚本。这是我现在得到的:

$params = array(
    'a' => var1,
    'b' => var2
);

那么运行的cmd就是:

php index.php process process_opk params

在我的控制器中,只是为了查看数组如何/是否正确通过:

public function index($args) {
    print_r($args);
}

这个输出是params作为一个字符串。

在发送之前我需要先序列化我的数组吗?我猜 CLI 改变了变量通过 CLI 传递的方式,我错了吗?如果有人可以详细说明这一点并展示最佳实践,那就太好了。谢谢!

更新: 目前我能找到的最佳解决方案是对序列化数据进行base64_encode 并将其作为长字符串发送。然后在控制器中解码和反序列化并将数组发送到我的脚本。

【问题讨论】:

    标签: php codeigniter parameters command-line-interface


    【解决方案1】:

    默认情况下,CI 允许使用“a-z 0-9~%.:_-”字符。 base64 生成另一个符号,如 + 和 =。这就是为什么最好使用rawurlencode 而不是base64:

    exec( 'php index.php controller function '.rawurlencode(serialize($params)) );
    

    转移和外壳是安全的。

    【讨论】:

      【解决方案2】:

      如果参数个数不是太多,可以传参数,比如...

      php index.php process process_opk/par1/par2/par3...
      

      在控制器中

      <?php
      
      class Process extends CI_Controller {
      
      function __construct() {
          parent::__construct();       
      }
      
      public function index()
      {
          $this->process_opk();
      }
      
      public function process_opk($par1 = -1,$par2 = -1,$par3 = -1)
      {
        //process
      }
      ?>
      

      【讨论】:

        【解决方案3】:

        我猜 CLI 改变了变量通过 CLI 传递的方式,我错了吗?

        没有。

        https://stackoverflow.com/a/2873015/183254

        您的解决方案似乎是最好的路线,尽管不确定 base64 是否必要(尤其是如果您有不稳定的字符,则可能是这样)。

        【讨论】:

        • 好吧,CI 默认不允许{ } =,而且可能更多,所以不值得冒险。这适用于我需要的自动取款机。
        【解决方案4】:

        要将其传递到带有帖子数据的新线程:

        exec('nohup php index.php controller method ' . rawurlencode($this->input->raw_input_stream) . ' ' . arg2 . ' ' . $arg3 . ' > /dev/null 2>&1 & echo $!', $op);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多