PHP Command Line Interfaceからパラメーターを渡し、次に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"
そのため、正しい場所に正しいパラメーターを入力するようユーザーに十分に通知します。これらのパラメーターを解析する適切な方法は何ですか?
コマンドラインから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));
そうすれば、等号を解析することなく、等号の前に必要なものを置くことができ、key => valueのペアが正しいことを確認するだけです。ただし、これは少し無駄です。引数を渡す正しい順序をユーザーに指示するだけです。
このかなり簡潔な方法を使用します。
if($argc>1)
parse_str(implode('&',array_slice($argv, 1)), $_GET);
次のような呼び出しを処理します:
php script.php item1=4 item2=300
$ _GETに送信することにより、WebまたはCLIアクセスを自動的に処理します。
解説のために、これは次のことを行っています。
答えは正解であり、手動で構文解析を行うこともできますが、PHPは、ここで実際に役立つかもしれないgetopt()
関数も提供します。
また、必要なものになる可能性のあるオブジェクト指向の代替手段(PHPで作成され、多数のライブラリで利用可能)もあります。 「php getopt」をグーグルで検索すると、役立つ結果が得られます。
getopt()
関数は、おそらく質問の場合の最も正しい答えです。特にPHP 5.3でプラットフォームに依存しないようになったため、この質問の特定のケースで複数のパラメーターを解析する場合、この関数を活用する1つの方法は次のようになります。
$defaultValues = array("inputFirstName" => "");
$givenArguments = getopt("", array("inputFirstName:"));
$options = array_merge($defaultValues, $givenArguments);
$inputFirstName = $options['inputFirstName'];
値「Robby」で$ inputFirstNameを設定する呼び出しは次のようになります。
> php script.php --inputFirstName="Robby"
説明
予想されるすべてのパラメーターのデフォルト値は、$defaultValues
配列に設定されます。コマンドライン引数を介して送信される入力は、PHPのgetopt
関数によって収集され、$givenArguments
によって保存されます。 :
文字列の末尾のコロン("inputFirstName:"
)は、これが必須の引数であることを示していることに注意してください。ここにコロンがなければ、引数の存在のみが検出され、実際の値は検出されません( PHP Manual の詳細)。これら2つの配列を一緒にマージします。 3行目では、すべての期待されるパラメーターがデフォルト値またはコマンドライン/ターミナルから提供される引数が設定されている場合、それらのパラメーターが配列になります。
ライブラリの使用を気にしない場合は、 Symfonyのコンソールコンポーネント をご覧になることをお勧めします。
コマンドラインアプリケーションの作成に使用でき、 引数とオプション の使用をサポートします。
ドキュメントページには、開始するための優れた例がいくつか含まれています。
もちろん、ボンネットの下では、vascowhiteで説明されているのと同じ手法を使用します。