2013-03-19 75 views
2

我需要在命令行上運行我的一個CI腳本。我需要將一個數組傳遞給控制器​​,然後傳遞給腳本。下面是我有現在:Codeigniter通過CLI將數組傳遞到控制器

$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編碼並將其作爲長字符串發送。然後在控制器中解碼並反序列化並將數組發送到我的腳本。

回答

2

默認情況下,CI允許「a-z 0-9〜%。:_-」字符。 base64會產生另一個符號,例如+和=。這就是爲什麼它可以更好地使用rawurlencode代替的base64的:

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

這對transfering &貝殼安全。

1

我想CLI更改變量如何通過CLI傳遞,我錯了嗎?

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

您的解決方案似乎是最好的路線,雖然不知道Base64是必要的(如果你有靠不住的字符可能是ESP)。

+0

嘛,CI不允許'{} ='在默認情況下,也可能更多,所以不值得冒險。這是爲我需要atm的工作。 – 2013-03-19 20:17:55

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 
} 
?> 
相關問題