PHPでコマンドライン引数とかオプションを取得する方法

例えばPHPスクリプトをコマンドから実行するときに、

  • コマンドライン引数を調べたい
  • オプションとかも取得したい

こういうことって多くはないけど、必要な場面があると思います。

そこでPHP内でコマンド引数とかオプションを受け取る方法&コード例をまとめました。

自分自身もやり方を忘れがちなので、その忘備録も兼ねて紹介します。

コマンド引数を受け取ること自体は簡単

ではまずコマンド引数を受け取る方法について

そのやり方は簡単で、次の2つのどちらかを参照すればOK

  • $_SERVER['argv'] 
  • $argv 

この2つのどっちかを使えば、コマンド引数を連想配列で受け取れます。

ちなみに Cron でphpスクリプトを自動実行してる場合でも参照可能 です。

実際のコード例とか取得方法は次の通り

 

例えば xxx.php  というファイルを作って、
そこに次みたいにコマンド引数を全部表示するスクリプトを書いたとします。

そしてこの xxx.php  をコマンドから実行( php へのパスは通してるものとする)

そうするとスクリプトの出力はこうなります。

上の出力を見ればわかるように、php自体は引数に含まれません。

phpの後に続く引数が配列として参照できます。

 

以上がPHPでコマンド引数を取得する方法

先ほども書いたみたいに、次の2つから参照可能です。

  • $_SERVER['argv']
  • $argv

まあどっちを使ってもいいですが、自分は $_SERVER['argv']  を使うことが多いですね。

あと $argc  を参照すれば引数の個数だけ求めることもできます。

コマンド引数のオプションを調べるには

お次はコマンドライン引数のオプションを調べる方法について

こっちは getopt  関数を使えば、色々取得可能です。

取得できるオプションの種類は次の2つ

  • "-y"  みたいな1文字だけのオプション
  • "--hoge"  みたいな複数文字列のオプション

この2つではオプション値の取得方法も違うので、別々に紹介してきます。

-x みたいな1文字オプションを取得する方法

まずは -y -m -d みたいな1文字だけで構成されるオプションについて

1文字だけの場合は、
getopt 関数の第1引数に取得したいオプションを文字列で渡して取得します。

 

例えば次みたいなコマンド付きで xxx.php  を実行したとしましょう。

上の -y2019 -m05 -d29  がオプションの部分

このコマンドの、

  • オプション名( -y  とか -m  とか -d  )
  • オプション値( 2019  とか 05  とか 29  )

この両方を取得したい場合次コードを書けばOK

上コードの出力例は次みたいになります。

オプション名と値がペアになって表示されてるのが分かるはず

これが ハイフン + 1文字 だけのオプションを取得する方法です。

 

ちなみに、さっきのコードだとオプションの後に ::  がありましたよね?

このコロンの数というのは値の受け取り方を指定するものです。

その状態というのはコロンの数によって変わり、

  • コロン1つ( :  ) => 値はなくてもいい
  • コロン2つ( ::  ) => 値は必須
  • コロンなし() => 値を一切受け付けない

こういう風にコロンの数によって値を受け取ったり、逆に拒否できます。

--year みたいな文字列のオプションを取得する方法

お次は1文字じゃなくて複数文字で成り立つオプションを調べる方法について

その場合は getopt の第2引数に調べたいオプションの配列を渡せばできます。

 

例えば xxx.php  を次のコマンド付きで実行するとしましょう。

この場合だと --year  とか --month  がオプション名、
ダブルクォートで囲まれた "2019"  とか "05"  がオプション値になります。

これを取得して表示するのが次のコード

そして上コードの出力結果は次の通り

こっちもオプション名とオプション値が取得できました。

ちなみにコロンの数によって値を受け取ったり、拒否できるのは1文字オプションと同じです。

まとめ

ここまでを簡単にまとめると次の通り

  • コマンドライン引数を受け取る
    定義済みの $_SERVER['ARGV']  または $argv  を参照
  • 単体文字オプションを受け取る
    getopt関数に "y::m::d::"  みたいなオプションを並べた文字列を渡すことで取得可能。ただし、オプション名の後のコロンの数に応じて値の受け取り方が異なる
  • 文字列オプションを受け取る場合
    getopt関数の第2引数にオプション名を並べた配列を渡すことで取得可能。ただし、オプション名の後のコロンの数によって値の受け取り方が異なる(単体文字と同じ)

以上、PHPでコマンドライン引数とかオプションを調べる方法でした。ではでは

PHP

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください