1

$ argv配列にはほぼ同じ値が含まれており、正確な値を保持しているのは誰かわかりません。つまり、特別な記号のエスケープ/引用はすべて消えます。したがって、再処理せずに同じパラメータを別のスクリプトに渡す(または単に呼び出された正確なコマンドをログに記録する)ことはできません。これは、避けたい無用なコードです。

これがテストphpファイルです:

<?php
var_dump($_SERVER["argv"]);

デモンストレーション:

[denis@mypc ~]$ php test.php key="val space" key2=val\ space
array(3) {
  [0]=>
  string(8) "test.php"
  [1]=>
  string(13) "key=val space"
  [2]=>
  string(14) "key2=val space"
}

したがって、join( ""、$ argv)を使用すると、次のようになります。

test.php key=val space key2=val space

これは同じ呼び出しではありません(2つではなく4つのパラメーターが含まれています)。

繰り返しますが、理想的には、実行しているのとまったく同じコマンドを取得する必要があります。

4

1 に答える 1

5

このように引数を処理する必要があります

$arguments = $argv;
array_shift($arguments);
foreach($arguments as $value) {
    $pieces = explode('=',$value);
    if(count($pieces) >= 2) {
        $real_key = $pieces[0];
        array_shift($pieces);
        $real_value = implode('=', $pieces);
        $real_arguments[$real_key] = $real_value;
    }
}

配列$real_argumentsにはプロセス値が含まれます

于 2012-11-14T07:49:45.623 に答える