3

コマンドラインで CI スクリプトの 1 つを実行する必要があります。配列をコントローラーに渡してから、スクリプトに渡す必要があります。これが私が今持っているものです:

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

次に、実行中のコマンドは次のとおりです。

php index.php process process_opk params

私のコントローラーでは、配列が適切に通過する方法/かどうかを確認するために、次のものがあります。

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

これの出力はparams文字列です。

アレイを送信する前に、最初にアレイをシリアライズする必要がありますか? CLI は変数が CLI を介して渡される方法を変更すると思いますが、間違っていますか? 誰かがこれについて詳しく説明し、ベスト プラクティスを示すことができれば、それは素晴らしいことです。ありがとう!

更新:これまでに見つけた最善の解決策は、シリアル化されたデータを base64_encode し、長い文字列として送信することです。次に、コントローラーでデコードしてシリアル化を解除し、配列をスクリプトに送信します。

4

4 に答える 4

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
}
?>
于 2013-07-20T13:15:01.943 に答える
2

デフォルトでは、CI は "az 0-9~%.:_-" 文字を許可します。base64 は、+ や = などの別の記号を生成します。そのため、base64 の代わりにrawurlencodeを使用する方がよい場合があります。

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

乗り換え&シェルにも安心です。

于 2013-07-03T13:28:05.643 に答える
1

CLI は変数が CLI を介して渡される方法を変更すると思いますが、間違っていますか?

いいえ。

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

あなたの解決策は最善の方法のようですが、base64が必要かどうかはわかりません(不安定な文字がある場合はespかもしれません)。

于 2013-03-19T19:27:47.947 に答える