34

PHP コマンド ライン インターフェイスからパラメーターを渡し、PHP スクリプトを使用して値を読み取ります。次のようになります。

<?php
  $name1 = $argv[1];    
  echo $name1;
?>

次のように CLI から変数を渡します。

C:\xampp\php\php.exe name.php Robby

上記は機能し、Robby を出力として取得します。

しかし、私はこのようなことをしたい:

C:\xampp\php\php.exe name.php -inputFirstName="Robby"

これにより、ユーザーは適切な場所に正しいパラメーターを入力するよう十分な情報を得ることができます。これらのパラメータを解析する適切な方法は何ですか?

4

8 に答える 8

43

コマンド ラインから PHP スクリプトを呼び出す場合、$argc を使用して渡されたパラメータの数を確認し、$argv を使用してそれらにアクセスできます。たとえば、次のスクリプトを実行します。

<?php
    var_dump($argc); //number of arguments passed 
    var_dump($argv); //the arguments passed
?>

このような:-

php script.php arg1 arg2 arg3

次の出力が得られます

int(4)
array(4) {
  [0]=>
  string(21) "d:\Scripts\script.php"
  [1]=>
  string(4) "arg1"
  [2]=>
  string(4) "arg2"
  [3]=>
  string(4) "arg3"
}

詳細については、 $argv$argcを参照してください。

あなたがしたいことをするために、言ってみましょう

php script.php arg1=4

等号の引数を分解する必要があります:-

list($key, $val) = explode('=', $argv[1]);
var_dump(array($key=>$val));

そうすれば、等号を解析せずに必要なものを等号の前に置くことができます。キー=>値のペアが正しいことを確認してください。ただし、これは少し無駄です。引数を渡す正しい順序をユーザーに指示するだけです。

于 2012-06-15T10:38:46.690 に答える
19

私はこのかなり簡潔な方法を使用します:

if($argc>1)
  parse_str(implode('&',array_slice($argv, 1)), $_GET);

次のような呼び出しを処理します。

php script.php item1=4 item2=300

$_GET に送信することで、Web または CLI アクセスを自動的に処理します。

解説のために、これは次のことを行っています。

  • 引数の数が 1 より大きい場合 (最初の項目がスクリプトの名前であるため)、続行します。
  • 最初のアイテムを除く引数配列を取得します
  • アンパサンドを使用して標準のクエリ文字列形式に変換します
  • parse_str を使用して $_GET 配列に抽出します
于 2013-07-06T15:19:44.773 に答える
-1

プログラムのユーザー入力を解析して-inputFirstName="x"(たとえば、正規表現を使用して) 特定の文字列を探し、正しい変数を x に設定できます。

于 2012-06-15T10:26:45.473 に答える