PHPでコマンドライン引数を取得する方法

PHPはWebサーバ経由で実行されることが多いですが、コマンドラインからの実行も可能です。コマンドラインからの実行時に引数(パラメータ)を与えるのが、コマンドライン引数です。

コマンドラインからの実行

たとえば、keisan.php をコマンドラインから実行する場合、以下のように行います。

php keisan.php

これでkeisan.phpが実行され結果が表示されます。

実行するとき、何らかの値を与えるのがコマンドライン引数です。例えば、

php keisan.php 10 20

のようにphpファイル名の後に、空白で区切って文字列を渡します。

コマンドライン引数の取得

では、実行するPHPスクリプトでコマンドライン引数を取得するにはどうすればよいでしょうか?コマンドライン引数は配列argvに入ってますので簡単に取得できます。

<?php
$num1 = $argv[1];
$num2 = $argv[2];
echo $num1+$num2;
?>

上の例では $argv1に10が入り、$argv[2] に20が入ります。取得した値を足して表示しています。つまり、以下のようになります。

$ php keisan.php 10 20
30

なお、配列は0番目から始まりますが、$argv[0] にはコマンドラインで指定したphpファイル名が入ります。すなわち、この例だと keisan.php が入ります。

コマンドライン引数の数

この例のkeisan.php は2つのコマンドライン引数を与えてその足し算を行います。
つまり、コマンドライン引数が2つ指定が無ければ計算できずエラーになってしまいます。
これをプログラム側でチェックするにはどうすればよいでしょうか?

そのためには、コマンドライン引数をいくつ指定されたかを確認するため $argc を使います。$argcにはコマンドライン引数の数が入ります。

<?php
if( $argc != 3 ){
    echo "数を2つ指定して下さい";
    exit(0);
}

$num1 = $argv[1];
$num2 = $argv[2];
echo $num1+$num2;
?>

コマンドライン引数は上記のように0番目にはphpスクリプト名が入り、これもargcのカウントに数えます。その後に2つ引数を指定すると、argcは3になります。この例ではargcが3でなければメッセージを出してスクリプトを終了しています。

まとめ

コマンドラインを使ったPHPスクリプトの実行ではこのようにコマンドライン引数を使うと実行時に値を与えられるのでいちいちコードを書き直す必要がありません。使い方も簡単ですので是非使ってみて下さい。