【PHP8.x】getopt()関数の使い方
getopt関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
『getopt関数は、コマンドラインからスクリプトに渡された引数を解析するために使用する関数です。PHPスクリプトをコマンドラインで実行する際に、ユーザーが指定したオプション(例: -v や --file=test.txt)を簡単に扱えるようになります。この関数は、指定されたルールに基づいて引数を解析し、結果を連想配列として返します。第一引数には、認識させたい短いオプション(ハイフン1つで始まる)の文字列を指定します。例えば、「a」は値を取らないオプション、「b:」は必須の値を伴うオプション、「c::」は任意の値を伴うオプションとして定義します。第二引数には、長いオプション(ハイフン2つで始まる)を配列で指定します。こちらも短いオプションと同様に、オプション名の後にコロンを付けることで値の要否を制御できます。第三引数に変数を渡すと、オプションの解析が終了した位置のインデックスがその変数に格納されます。これにより、オプションではない通常の引数を区別できます。解析に成功するとオプション名と値のペアからなる連想配列が返され、失敗した場合はfalseが返ります。この関数を使うことで、柔軟なコマンドラインツールをPHPで効率的に作成できます。』
構文(syntax)
1<?php 2$shortopts = "ab:c::"; 3$longopts = [ 4 "option1", 5 "option2:", 6 "option3::", 7]; 8 9$options = getopt($shortopts, $longopts); 10?>
引数(parameters)
string $short_options, array $long_options = [], ?int &$rest_index = null
- string $short_options: 短縮オプションの指定。例: "a::b"
- array $long_options = []: 長縮オプションの指定。連想配列でキーにオプション名、値に引数の有無を指定。例: ["opt1" => \PHP_GETOPT_OPTIONAL_ARGUMENT, "opt2" => \PHP_GETOPT_REQUIRED_ARGUMENT]
- ?int &$rest_index = null: オプションとして解析されなかった引数の配列のインデックスを格納する変数への参照。NULL許容。
戻り値(return)
array|false
getopt関数は、コマンドライン引数を解析し、その結果を連想配列として返します。解析に失敗した場合はfalseを返します。
サンプルコード
PHP getoptでコマンドライン引数を解析する
1<?php 2 3/** 4 * コマンドラインから渡された引数を getopt() を使って解析するサンプルスクリプト。 5 * 6 * このスクリプトは、ファイルパスを指定するオプション (-f or --file) と、 7 * 冗長な出力を有効にするオプション (-v or --verbose) を受け取ります。 8 * オプション以外の引数もリストアップします。 9 * 10 * [実行方法] 11 * ターミナルで以下のコマンドを実行してみてください。 12 * 13 * 1. 短いオプションと長いオプションを両方使う: 14 * php a.php -f /path/to/input.txt --verbose item1 item2 15 * 16 * 2. 長いオプションのみ使う (引数は = で渡すことも可能): 17 * php a.php --file=/path/to/output.log item3 18 * 19 * 3. 引数を取らないオプションのみ使う: 20 * php a.php -v item4 21 * 22 * 4. オプションを使わない: 23 * php a.php item5 item6 24 */ 25 26// 短いオプションの定義 27// "f:" : -f オプションが必須の引数を取ることを示す (例: -f filename.txt) 28// "v" : -v オプションが引数を取らないことを示す (フラグとして機能) 29$short_options = "f:v"; 30 31// 長いオプションの定義 32// "file:" : --file オプションが必須の引数を取ることを示す (例: --file=filename.txt) 33// "verbose" : --verbose オプションが引数を取らないことを示す 34$long_options = [ 35 "file:", 36 "verbose", 37]; 38 39// getopt() を使ってコマンドライン引数を解析する 40// 3番目の引数 $rest_index には、オプションとして解釈されなかった 41// 最初の引数のインデックスが格納される (PHP 8.0.0 以降) 42$options = getopt($short_options, $long_options, $rest_index); 43 44// --- 解析結果の表示 --- 45 46// --file または -f オプションが指定されたかチェック 47if (isset($options['file']) || isset($options['f'])) { 48 // 短いオプションと長いオプションは同時に指定できないため、?? (Null合体演算子) で値を取得 49 $filePath = $options['file'] ?? $options['f']; 50 echo "ファイルパスが指定されました: " . $filePath . PHP_EOL; 51} 52 53// --verbose または -v オプションが指定されたかチェック 54if (isset($options['verbose']) || isset($options['v'])) { 55 echo "冗長モードが有効です。" . PHP_EOL; 56} 57 58// オプション以外の引数を表示する 59// $argv と $argc はPHPが自動的に定義するグローバル変数 60// $argc: コマンドライン引数の数 61// $argv: コマンドライン引数の配列 62echo "---" . PHP_EOL; 63echo "オプション以外の引数リスト:" . PHP_EOL; 64for ($i = $rest_index; $i < $argc; $i++) { 65 echo $argv[$i] . PHP_EOL; 66} 67 68if ($argc <= 1) { 69 echo "オプションや引数が指定されていません。上記の実行方法を参考にしてください。" . PHP_EOL; 70} 71 72?>
PHPのgetopt関数は、コマンドラインからスクリプトに渡された引数を解析するために使用されます。バージョン8以降のPHPで利用可能です。
この関数は、プログラム実行時に指定されるオプションを定義し、その値を取得します。
最初の引数$short_optionsには、短いオプション(1文字のオプション、例: -f)を文字列で指定します。「:`」(コロン)をオプション名の後ろに付けると、そのオプションが必須の引数を取ることを示します。
二番目の引数$long_optionsには、長いオプション(複数文字のオプション、例: --file)を配列で指定します。同様に、「:`」をオプション名の後ろに付けると、必須の引数を取ることを示します。
三番目の引数$rest_indexは参照渡しで、PHP 8.0.0以降では、オプションとして解析されなかった最初の引数のインデックスが格納されます。これにより、オプション以外の残りの引数を取得できます。
getopt関数は、解析されたオプションとその値を含む連想配列を返します。もし解析に失敗した場合はfalseを返します。
サンプルコードでは、-fまたは--file(ファイルパス指定)と、-vまたは--verbose(冗長モード)のオプションを定義し、その値を解析しています。解析結果の$options配列から値を取得し、$rest_indexと$argvを使ってオプション以外の引数を表示することで、コマンドラインからの入力に柔軟に対応しています。
getopt関数では、オプション定義にコロン(:)を付けるかで、そのオプションが引数を取るかフラグとして機能するかが決まる点にご注意ください。短いオプションと長いオプションで同じ機能を持つ場合、戻り値の配列では両方のキーが存在する可能性があるので、??演算子を用いて安全に値を取得してください。オプション以外の引数は、getoptの第三引数$rest_indexとグローバル変数$argvを組み合わせて取得します。また、getoptは解析に失敗するとfalseを返すため、戻り値がarrayかfalseかを常に確認し、適切なエラーハンドリングを行うことが重要です。
PHP getoptでコマンドライン引数を解析する
1<?php 2 3/** 4 * コマンドライン引数を解析し、オプションとその値、 5 * およびオプションではない引数を表示するサンプルスクリプトです。 6 * 7 * このスクリプトは、以下の種類のコマンドラインオプションを処理できます。 8 * - 引数を取らない短縮オプション (例: -a) 9 * - 引数を必須とする短縮オプション (例: -b value) 10 * - 引数を任意とする短縮オプション (例: -c または -c value) 11 * - 引数を取らない長オプション (例: --verbose) 12 * - 引数を必須とする長オプション (例: --file=path) 13 * - 引数を任意とする長オプション (例: --config または --config=value) 14 * 15 * 実行例: 16 * php your_script_name.php -a -b valueB --verbose --file=path/to/file.txt --config option_arg arg1 arg2 17 */ 18 19// 短縮オプションの定義 20// 'a': 引数を取らないフラグ 21// 'b:': 引数を必須とするオプション (コロン1つ) 22// 'c::': 引数を任意とするオプション (コロン2つ) 23$shortopts = "ab:c::"; 24 25// 長オプションの定義 26// 'verbose': 引数を取らないフラグ 27// 'file:': 引数を必須とするオプション (コロン1つ) 28// 'config::': 引数を任意とするオプション (コロン2つ) 29$longopts = [ 30 "verbose", 31 "file:", 32 "config::" 33]; 34 35// getopt() 関数を使用してコマンドラインオプションを解析します。 36// $options には解析されたオプションとその値が連想配列として格納されます。 37// $rest_index には、オプションではない引数が始まる $_SERVER['argv'] のインデックスが格納されます。 38$options = getopt($shortopts, $longopts, $rest_index); 39 40// オプション解析に失敗した場合の処理 41if ($options === false) { 42 echo "エラー: コマンドラインオプションの解析に失敗しました。" . PHP_EOL; 43 exit(1); 44} 45 46echo "--- 解析されたオプション ---" . PHP_EOL; 47 48// 解析されたオプションをループして表示します。 49foreach ($options as $opt => $val) { 50 echo "オプション '$opt': "; 51 if (is_array($val)) { 52 // 同じオプションが複数回指定された場合、値は配列になります。 53 echo "値は配列 [" . implode(', ', $val) . "]" . PHP_EOL; 54 } elseif ($val === false) { 55 // 引数なしの長オプション (--verbose) や、引数任意オプションで引数が提供されなかった場合 (--config) 56 // の値は false になります。 57 echo "値は 'false' (引数なし、または引数が提供されなかった)" . PHP_EOL; 58 } elseif ($val === true) { 59 // 引数なしの短縮オプション (-a) の値は true になります。 60 echo "値は 'true' (フラグとして存在)" . PHP_EOL; 61 } else { 62 // 引数を持つオプションの値は文字列になります。 63 echo "値は '$val'" . PHP_EOL; 64 } 65} 66 67echo PHP_EOL . "--- オプションではない引数 ---" . PHP_EOL; 68 69// $rest_index を使用して、オプションではない引数 (残りの引数) を取得し表示します。 70// $_SERVER['argv'] は、スクリプト名を含むすべてのコマンドライン引数を保持する配列です。 71if (isset($rest_index) && isset($_SERVER['argv'][$rest_index])) { 72 for ($i = $rest_index; $i < $_SERVER['argc']; $i++) { 73 // $_SERVER['argv'][$i] がオプションではない個々の引数です。 74 echo "引数 " . ($i - $rest_index + 1) . ": " . $_SERVER['argv'][$i] . PHP_EOL; 75 } 76} else { 77 echo "オプションではない引数はありません。" . PHP_EOL; 78} 79 80?>
PHPのgetopt関数は、コマンドライン引数を解析し、スクリプトの動作を制御するために使用されます。この関数は、スクリプト実行時に渡されたオプションと、その値を簡単に取得できるようにします。
第一引数$short_optionsでは、-aや-b valueのような単一文字の短縮オプションを定義します。文字の後にコロンを1つ付けると引数必須、2つ付けると引数任意となります。第二引数$long_optionsは、--verboseや--file=pathのような複数文字の長オプションを配列で定義します。これも同様にコロンの数で引数の必須/任意を指定します。第三引数$rest_indexはオプションではない通常の引数が、グローバル変数$_SERVER['argv']配列のどのインデックスから始まるかを示す整数を格納します。
getopt関数は、解析に成功すると、オプション名をキー、オプションの値を値とする連想配列を返します。引数なしの短縮オプションはtrue、長オプションはfalse、引数を持つオプションはその値が文字列として格納されます。同じオプションが複数回指定された場合、値は配列になります。解析に失敗した場合はfalseを返します。$rest_indexと$_SERVER['argv']を組み合わせることで、オプションではない残りの引数も取得し、利用することができます。
PHPのgetopt関数では、短縮オプションと長オプションの定義におけるコロンの数が重要です。コロンがない場合は引数なし、コロン1つは引数必須、コロン2つは引数任意となり、これを誤ると意図通りに動作しません。関数が返す値は、成功時には連想配列、失敗時にはfalseとなるため、必ずエラーチェックを行ってください。オプションの値は、引数の有無や複数指定によってtrue、false、文字列、または配列と変化するため、それぞれのケースに対応した処理が必要です。第三引数&$rest_indexを利用することで、オプションではない残りの引数を$_SERVER['argv']から安全に取得できますが、$rest_indexがセットされない場合も考慮が必要です。
PHP getopt でコマンドライン引数をパースする
1<?php 2 3/** 4 * コマンドライン引数をパースし、その結果を表示するサンプルコードです。 5 * getopt関数がPHP 8でどのように動作し、異なる形式のオプションをどのように扱うかを示します。 6 * 「php getopt not working」という問題に直面した場合、引数の定義と渡し方が 7 * このサンプルと一致しているか確認することで、原因を特定しやすくなります。 8 * 9 * このコードを実行するには、PHP CLIを使用します。 10 * 11 * 実行例: 12 * 1. オプションなしの場合: 13 * php your_script_name.php 14 * 15 * 2. 短いフラグオプションと、短い値必須オプションの場合: 16 * php your_script_name.php -a -b valueB 17 * 18 * 3. 長いフラグオプションと、長い値必須オプションの場合: 19 * php your_script_name.php --verbose --file=path/to/my/document.txt 20 * 21 * 4. 値が任意のオプションの場合: 22 * php your_script_name.php -n OptionalValue --name="John Doe" 23 * php your_script_name.php -n --name 24 * 25 * 5. ヘルプオプションの場合: 26 * php your_script_name.php --help 27 * 28 * 6. 必須オプションの値が指定されなかった場合 (この場合、そのオプションの値はnullになります): 29 * php your_script_name.php -b --file 30 * 31 * 7. 同じオプションを複数回指定した場合 (値は配列として格納されます): 32 * php your_script_name.php --name=Alice --name=Bob -b val1 -b val2 33 */ 34function parseCommandLineOptions(): void 35{ 36 // 短いオプションの定義: 37 // 'a' : 値なし (フラグオプション) 38 // 'b:' : 値が必須 39 // 'n::': 値が任意 (オプションの値) 40 $shortOptions = "ab:n::"; 41 42 // 長いオプションの定義: 43 // "verbose" : 値なし (フラグオプション) 44 // "file:" : 値が必須 45 // "name::" : 値が任意 (オプションの値) 46 // "help" : 値なし (フラグオプション) 47 $longOptions = [ 48 "verbose", 49 "file:", 50 "name::", 51 "help" 52 ]; 53 54 // getopt関数でコマンドライン引数をパースします。 55 // パースエラーが発生した場合、getoptはfalseを返します。 56 // オプションが一つも指定されなかった場合は、空の配列を返します。 57 $options = getopt($shortOptions, $longOptions); 58 59 if ($options === false) { 60 echo "エラー: コマンドライン引数のパースに失敗しました。\n"; 61 echo "定義されていないオプションや不正な形式が指定されている可能性があります。\n"; 62 return; 63 } 64 65 echo "--- パースされたオプション ---\n"; 66 67 if (empty($options)) { 68 echo "オプションは指定されていません。\n"; 69 } else { 70 foreach ($options as $opt => $val) { 71 if (is_array($val)) { 72 // 同じオプションが複数回指定された場合 73 echo "オプション '{$opt}': [" . implode(", ", $val) . "]\n"; 74 } elseif ($val === true) { 75 // 値なしのフラグオプション (例: -a, --verbose)。PHP 8の挙動。 76 echo "オプション '{$opt}': (フラグ)\n"; 77 } elseif ($val === null) { 78 // 値が必須のオプションだが、値が提供されなかった場合。 79 // (例: `-b` が定義されているが `-b` の後に値がない) 80 echo "オプション '{$opt}': (値なし - 必須オプションの値が指定されなかった可能性)\n"; 81 } else { 82 // 値ありのオプション (例: -b valueB, --file=path/to/file)。 83 echo "オプション '{$opt}': '{$val}'\n"; 84 } 85 } 86 } 87 echo "--------------------------\n"; 88 89 // `--help` オプションが指定された場合の特別な処理 90 if (isset($options['help'])) { 91 echo "\nこのスクリプトは、コマンドライン引数を処理する方法を示します。\n"; 92 echo "利用可能なオプション:\n"; 93 echo " -a : 短いフラグオプション (例: -a)\n"; 94 echo " -b <value> : 短い、値必須オプション (例: -b my_value)\n"; 95 echo " -n [<value>] : 短い、値任意オプション (例: -n or -n some_value)\n"; 96 echo " --verbose : 長いフラグオプション (例: --verbose)\n"; 97 echo " --file=<value> : 長い、値必須オプション (例: --file=path/to/data.txt)\n"; 98 echo " --name[=<value>] : 長い、値任意オプション (例: --name or --name=Alice)\n"; 99 echo " --help : このヘルプメッセージを表示します。\n"; 100 } 101} 102 103// スクリプトがPHP CLI環境で直接実行された場合にのみ関数を呼び出す 104if (php_sapi_name() === 'cli') { 105 parseCommandLineOptions(); 106}
PHP 8のgetopt関数は、コマンドラインインターフェース(CLI)でPHPスクリプトを実行する際に、ユーザーが指定したオプション(引数)を効率的に解析するために使用されます。この関数は、-aのような短いオプションと--verboseのような長いオプションの両方を柔軟に扱います。
第一引数$short_optionsでは、短いオプションの定義を文字列で行います。オプション名の後にコロン:を付けると値が必須、二重コロン::を付けると値が任意となります。第二引数$long_optionsは、長いオプションの定義を配列で行い、同様にコロンで値の要件を指定します。
getopt関数は、パースに成功した場合、オプション名とパースされた値を関連付けた連想配列を返します。値を持たないフラグオプション(例: -a)はtrueとして扱われ、値が必須なオプションで値が指定されなかった場合はnullとなります。同じオプションが複数回指定された場合は、値が配列として格納されます。引数の定義が不正であったり、未定義のオプションが指定されたりしてパースに失敗した場合はfalseを返します。
getoptが期待通りに動作しないと感じる場合、「php getopt not working」というキーワードで検索されることがありますが、その多くはオプションの定義とコマンドラインでの指定方法が正確に一致しているかを確認することで解決できます。
getopt関数では、短いオプションや長いオプションの定義において、値の有無や任意性を表す記号(:や::)が重要です。これらが正しく定義されていないと、期待通りにコマンドライン引数をパースできません。パース処理に失敗した場合、getoptはfalseを返すため、必ず戻り値をチェックし、エラー処理を適切に行うべきです。
PHP 8以降では、値を持たないフラグオプション(例: -a, --verbose)はtrueとして扱われます。一方で、値が必須と定義されているオプションに値が指定されなかった場合(例: -bのみで値なし)、その値はnullとなります。これらの違いを理解し、戻り値の型に応じた適切な処理を行うことが安全なコード利用に繋がります。また、同じオプションが複数回指定されると、値は配列として格納されますので、この点も考慮してください。本関数はPHP CLI環境での実行を想定しています。
PHP getopt()でコマンドラインオプションを解析する
1<?php 2 3/** 4 * コマンドラインオプションと引数を getopt() 関数を使って解析するサンプルスクリプトです。 5 * このスクリプトは、ショートオプション、ロングオプション、およびオプション以外の引数を 6 * どのように処理するかを示します。 7 * 8 * PHP 8 の getopt() の機能 (特に $rest_index 引数) を活用しています。 9 * 10 * 実行例: 11 * php script.php -f input.txt --verbose --config=dev.ini argument1 argument2 12 * php script.php --file=output.log -v argumentX 13 * php script.php -h # ヘルプを表示 14 */ 15function runCommandLineOptionParser(): void 16{ 17 // ショートオプションを定義します。 18 // 'f:' : 値を必須とするオプション (例: -f filename.txt) 19 // 'v' : 値を伴わないフラグオプション (例: -v) 20 // 'h' : 値を伴わないヘルプフラグ 21 $shortOptions = "f:vh"; 22 23 // ロングオプションを定義します。 24 // 'file:' : 値を必須とするオプション (例: --file=filename.txt または --file filename.txt) 25 // 'verbose' : 値を伴わないフラグオプション (例: --verbose) 26 // 'help' : 値を伴わないヘルプフラグ 27 $longOptions = [ 28 "file:", 29 "verbose", 30 "help" 31 ]; 32 33 // コマンドラインオプションを解析します。 34 // $restIndex には、オプションではない最初の引数の $argv 配列内のインデックスが格納されます。 35 $restIndex = null; // PHP 8 で導入された機能: $rest_index は null で初期化可能 36 $options = getopt($shortOptions, $longOptions, $restIndex); 37 38 // getopt() がエラーを返した場合 (例: 必須の値が不足している場合) の処理。 39 if ($options === false) { 40 echo "エラー: コマンドラインオプションの解析に失敗しました。\n"; 41 echo "コマンドの構文を確認してください。\n"; 42 exit(1); 43 } 44 45 // ヘルプオプションが指定された場合の処理。 46 if (isset($options['h']) || isset($options['help'])) { 47 echo "使い方: php " . basename(__FILE__) . " [オプション] [引数]\n"; 48 echo "オプション:\n"; 49 echo " -f <ファイル>, --file=<ファイル> 入力ファイルを指定します。\n"; 50 echo " -v, --verbose 詳細な出力を有効にします。\n"; 51 echo " -h, --help このヘルプメッセージを表示します。\n"; 52 exit(0); 53 } 54 55 echo "--- 解析されたオプション ---\n"; 56 57 // 解析されたオプションを表示します。 58 if (empty($options)) { 59 echo "オプションは指定されていません。\n"; 60 } else { 61 foreach ($options as $opt => $val) { 62 // 値を伴わないオプション (フラグ) は `false` を値として持ちます。 63 // 複数回指定されたオプション (例: --config=a --config=b) は配列として格納されます。 64 $displayValue = is_array($val) ? implode(", ", $val) : ($val === false ? '指定済み (値なし)' : $val); 65 echo " オプション '{$opt}': {$displayValue}\n"; 66 } 67 } 68 69 echo "\n--- 残りの引数 ---\n"; 70 71 // オプション以外の残りの引数を表示します。 72 // $GLOBALS['argv'] は、スクリプトに渡されたすべてのコマンドライン引数の配列です。 73 // $restIndex は、オプションではない引数が $GLOBALS['argv'] のどこから始まるかを示します。 74 if (isset($restIndex) && $restIndex < count($GLOBALS['argv'])) { 75 // $restIndex から後がオプションではない引数です。 76 $arguments = array_slice($GLOBALS['argv'], $restIndex); 77 if (empty($arguments)) { 78 echo "追加の引数はありません。\n"; 79 } else { 80 foreach ($arguments as $index => $arg) { 81 echo " 引数 " . ($index + 1) . ": {$arg}\n"; 82 } 83 } 84 } else { 85 echo "追加の引数はありません。\n"; 86 } 87 88 echo "\n--- 実行終了 ---\n"; 89} 90 91// スクリプトがコマンドラインインターフェース (CLI) から実行された場合のみ、 92// メインの関数を呼び出すようにします。 93if (PHP_SAPI === 'cli') { 94 runCommandLineOptionParser(); 95} else { 96 echo "このスクリプトはコマンドラインから実行することを想定しています。\n"; 97 exit(1); 98} 99
getopt関数は、PHPスクリプトがコマンドラインから実行される際に、指定されたオプション(例えば、-vや--file=test.txtなど)を解析するために使用されます。
この関数は、最初の引数$short_optionsで短い形式のオプション(例: -f)を、二番目の引数$long_optionsで長い形式のオプション(例: --file)を定義します。オプション名の後にコロン:を付けると、そのオプションが値を必須とすることを示します。PHP 8以降では、三番目の引数$rest_indexにnullを渡すことで、オプションではない最初の引数が$GLOBALS['argv']配列内のどのインデックスから始まるかを取得できます。これにより、オプションとオプションではない引数を明確に区別できます。
getopt関数は、オプションの解析に成功すると、オプション名をキー、その値をバリューとする連想配列を返します。値を持たないオプション(フラグ)はfalse、値を持つオプションはその値、同じオプションが複数回指定された場合は値の配列として格納されます。解析に失敗した場合はfalseを返します。
サンプルコードでは、-f <ファイル>や--file=<ファイル>のように値を必要とするオプションと、-vや--verboseのようなフラグオプションを定義し、それらがどのように解析され、プログラム内で利用されるかを示しています。また、$rest_indexを活用してオプション以外の引数(例: argument1)を取得し、表示する処理も含まれており、コマンドラインツールのオプション処理の基礎を理解するのに役立ちます。
PHPのgetopt()関数はコマンドラインオプションを解析する際に便利です。オプションを定義する際、コロン:をつけると値が必須となるため注意が必要です。この記法はショートオプション、ロングオプション共に共通です。関数がfalseを返した場合はオプションの指定に誤りがあるため、必ずエラーハンドリングを行い、適切なメッセージを表示してください。解析結果の配列では、値を持たないオプションはfalse、値を持つオプションは文字列として格納されます。また、同じオプションが複数回指定された場合は配列として格納されるため、これらの型に応じた処理を記述する必要があります。PHP 8以降で導入された$rest_index引数を使用すると、オプションではない残りの引数を$GLOBALS['argv']配列から簡単に抽出できます。この関数はコマンドラインからの実行を想定しているため、PHP_SAPI === 'cli'で実行環境を確認するのが安全です。