2013-03-19 2 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_encode сериализованные данные и отправить его как длинную строку. Затем в контроллере декодируют и несериализуют и отправляют массив в мой скрипт.

ответ

2

По умолчанию CI позволяет использовать символы «a-z 0-9 ~%.: _-». base64 создает другие символы, такие как + и =. Вот почему это может быть лучше использовать rawurlencode вместо base64:

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

Это безопасно для перенося & оболочки.

1

Я думаю, что CLI изменяет, как переменные передаются через CLI, не так ли?

No.

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

Ваше решение, кажется, самый лучший маршрут, хотя и не уверен, что base64 необходимо (это может быть особенно, если у вас есть шаткие символы).

+0

Ну, CI не допускает '{} =' по умолчанию и, вероятно, более того, поэтому не стоит риска. Это работает на то, что мне нужно. –

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 
} 
?> 
Смежные вопросы