1. 程式人生 > >PHP中 接收命令列引數

PHP中 接收命令列引數

1.$argv
PHP 的二進位制檔案(php.exe 檔案)及其執行的 PHP 指令碼能夠接受一系列的引數。PHP 沒有限制傳送給指令碼程式的引數的個數(外殼程式對命令列的字元數有限制,但通常都不會超過該限制)。傳遞給指令碼的引數可在全域性變數 $argv 中獲取。該陣列中下標為零的成員為指令碼的名稱(當 PHP 程式碼來自標準輸入獲直接用 -r 引數以命令列方式執行時,該名稱為“-”)。另外,全域性變數 $argc 存有 $argv 陣列中成員變數的個數(而非傳送給指令碼程式的引數的個數)。

只要傳送給指令碼的引數不是以 - 符號開頭,就無需過多的注意什麼。向指令碼傳送以 - 開頭的引數會導致錯誤,因為 PHP 會認為應該由它自身來處理這些引數。可以用引數列表分隔符 -- 來解決這個問題。在 PHP 解析完引數後,該符號後所有的引數將會被原樣傳送給指令碼程式。



# 以下命令將不會執行 PHP 程式碼,而只顯示 PHP 命令列模式的使用說明:
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f] <file> [args...]
[...]

# 以下命令將會把“-h”引數傳送給指令碼程式,PHP 不會顯示命令列模式的使用說明:
$ php -r 'var_dump($argv);' -- -h
array(2) {
[0]=>
string(1) "-"
[1]=>
string(2) "-h"
}

除此之外,還有另一個方法將 PHP 用於外殼指令碼。可以在寫一個指令碼,並在第一行以 #!/usr/bin/php 開頭,在其後加上以 PHP 開始和結尾標記符包含的正常的 PHP 程式碼,然後為該檔案設定正確的執行屬性(例如:chmod +x test)。該方法可以使得該檔案能夠像外殼指令碼或 PERL 指令碼一樣被直接執行。 #!/usr/bin/php

<?php
var_dump($argv);
?>

假設改檔名為 test 並被放置在當前目錄下,可以做如下操作:



$ chmod +x test

$ ./test -h -- foo

array(4) {

  [0]=>

  string(6) "./test"

  [1]=>

  string(2) "-h"

  [2]=>

  string(2) "--"

  [3]=>

  string(3) "foo"

}


正如所看到的,在向該指令碼傳送以 - 開頭的引數時,指令碼仍然能夠正常執行。

<?php
echo $argc . "\n";
var_dump($argv);
?>



H:\workspace>php test.php arg1 arg2


3

array(3) {

  [0]=>

  string(8) "test.php"

  [1]=>

  string(4) "arg1"

  [2]=>

  string(4) "arg2"

}



2.getopt

getopt

(PHP 4 >= 4.3.0, PHP 5)
getopt -- Gets options from the command line argument list
Description
array getopt ( string options [, array longopts] )

Returns an associative array of option / argument pairs based on the options format specified in options, or FALSE on an error.

On platforms that have the C function getopt_long, long options can be specified with the parameter longopts (as of PHP 4.3.0).
<?php
// parse the command line ($GLOBALS['argv'])
$options = getopt("f:hp:");
?>

The options parameter may contain the following elements: individual characters, and characters followed by a colon to indicate an option argument is to follow. For example, an option string x recognizes an option -x, and an option string x: recognizes an option and argument -x argument. It does not m