介紹如何在 PHP 中使用 $argv 與 $argc 變數與 getopt 函數讀取指令稿在命令列執行時所附帶的參數。
$argv 與 $argc
PHP 中的 $argc 與 $argv 兩個特殊變數記錄了 PHP 指令稿執行時所附帶的參數個數與參數內容,以下是一個簡單的使用範例。
<?php echo "參數數量:$argc\n"; echo "參數內容:\n"; var_dump($argv); ?>
假設這個指令稿名稱為 script.php,而執行指令為:
# 執行 PHP 指令稿並附帶參數
php script.php my params
輸出則為:
參數數量:3
參數內容:
array(3) {
  [0]=>
  string(10) "script.php"
  [1]=>
  string(2) "my"
  [2]=>
  string(6) "params"
}
getopt 函數
PHP 的 getopt 函數可以自動依據參數樣板解析命令列的參數,將各個參數名稱與值轉換為關聯式陣列,以下是一個簡單的範例:
<?php # 以 getopt 解析命令列參數 # a: 代表可接受 -a A_VALUE # b 代表可接受 -b # c: 代表可接受 -c C_VALUE $options = getopt("a:bc:"); var_dump($options); ?>
其中 getopt 函數所接受的 "a:bc:" 就是一個參數樣板,英文字母或數字(包含 a-z、A-Z、0-9)代表命令列參數中所有可能出現的參數名稱,而若名稱後方加上一個冒號(:)則代表該參數會接著一個參數值。
假設此指令稿的名稱為 script2.php,則實際執行狀況如下:
php script2.php -a param -b
array(2) {
  ["a"]=>
  string(5) "param"
  ["b"]=>
  bool(false)
}
php script2.php -a param -b -c other
array(3) {
  ["a"]=>
  string(5) "param"
  ["b"]=>
  bool(false)
  ["c"]=>
  string(5) "other"
}
getopt 函數也支援長參數名稱的解析,以下是解析長參數名稱的範例:
<?php # 短參數名稱 $shortopts = "a:bc:"; # 長參數名稱 $longopts = array( "required:", # 可接受 --required VALUE "option" # 可接受 --option ); $options = getopt($shortopts, $longopts); var_dump($options); ?>
假設此指令稿的名稱為 script3.php,則實際執行狀況如下:
php script3.php -c short --required long
array(2) {
  ["c"]=>
  string(5) "short"
  ["required"]=>
  string(4) "long"
}

