2012-12-13 66 views
4

在php命令行上,我只能讀取第一個參數。當我添加站點名稱時,密碼輸入前程序不會中斷。PHP在命令行中獲取多於一個參數

echo "Site name: "; 
$handle = fopen ("php://stdin","r"); 
$base_name = trim(fgets($handle)); 
fclose($handle); 

echo "Password:"; 
$handle = fopen ("php://stdin","r"); 
$base_password = trim(fgets($handle)); 
fclose($handle); 

如何從標準輸入讀取這兩個變量?

+0

這裏有作品嗎?任何錯誤? – Wrikken

+0

順便說一句,從命令行'$ base_name = trim(fgets(STDIN));'在它自己的工作,而不是自己打開/關閉處理。 – Wrikken

+0

感謝您的幫助!這是行得通!: 'echo「網站名稱:」; $ base_name = trim(fgets(STDIN)); echo「Password:」; $ base_password = trim(fgets(STDIN)); echo「\ n \ n \ n網站名稱:$ base_name \ n \ n密碼:$ base_password」; ' – Voidnull

回答

0

試試這個:

$base_name  = readline("Site Name: "); 
$base_password = readline("Password: "); 

PHP Readline Function

+0

的例子我的理解readline擴展沒有默認安裝。 – donatJ

+0

也許我的工作不能測試,沒有「readline」功能,默認php安裝在redhat上。 – Voidnull

+0

這是PHP 4&5的核心功能... –

1

你的論點在命令時間的推移將在全球以及超級全球$_SERVER["argv"]$argv[0]$_SERVER["argv"][0]是被調用的命令。

解析出例如呼叫./myscript.php --user=root --password=foobar

function parse_argvs(){ 
    if($params = $_SERVER["argv"]){ 
     $file = array_shift($params); 
     while($params){ 
      $param = array_shift($params); 
      switch(strspn($param, "-")){ 
       case(1): 
        $OPTS[ trim($param, " -") ] = array_shift($params); 
       break; 
       case(2): 
        list($key, $value) = explode("=", $param); 
        $OPTS[ trim($key, " -") ] = $value; 
       break; 
       default: 
        $OPTS[ $param ] = true; 
       break; 
      } 
     } 
    } 
    return $OPTS ?: array(); 
} 

名稱類似於

$parsed = parse_argvs(); 
echo $parsed['user']; //root 
echo $parsed['password']; //password 

有用的功能這些是在調用時傳遞實際命令行參數。我希望這有幫助。

+0

謝謝,有用。 – Voidnull