PHP在命令行中获取多个参数

PHP在命令行中获取多个参数,php,command-line,Php,Command Line,在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)); fcl

在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);
如何从stdin读取这两个变量?

试试以下方法:

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

您在命令时传递的参数将位于全局
$argv
以及超级全局
$\u服务器[“argv”]
,其中
$argv[0]
$\u服务器[“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

这些是在调用时传递的实际命令行参数。我希望这能有所帮助。

顺便说一句,从命令行
$base\u name=trim(fgets(STDIN))自己在这里工作,而不是自己打开/关闭手柄。谢谢您的帮助!这起作用了!:<代码>回声“站点名称:”$基本名称=修剪(fgets(STDIN));回声“密码:”$基本密码=trim(fgets(STDIN));echo“\n\n\n站点名称:$base\u名称\n\n密码:$base\u密码”你应该看看。。。以Directory为例据我所知,readline扩展在默认情况下未安装。可能无法测试,在redhat上的默认php安装中没有“readline”函数。