Codeigniter通过CLI将数组传递给控制器

时间:2013-03-19 14:47:33

标签: php codeigniter parameters command-line-interface

我需要在命令行上运行我的一个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并将其作为长字符串发送。然后在控制器中解码并反序列化并将数组发送到我的脚本。

4 个答案:

答案 0 :(得分:2)

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

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

转移和安全是安全的外壳

答案 1 :(得分:1)

  

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

没有

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

你的解决方案似乎是最好的路线,虽然不确定base64是否必要(如果你有不稳定的字符,它可能是esp)。

答案 2 :(得分:0)

如果参数数量不是太多,则传递像......这样的参数很方便。

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 :(得分:0)

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

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