介紹如何在 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"
}