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