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

时间:2012-12-13 19:06:59

标签: 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));
fclose($handle);

我如何从stdin中读取这两个变量?

2 个答案:

答案 0 :(得分:1)

您在命令时传递的参数将位于全局$argv以及超级全局$_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

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

答案 1 :(得分:0)

试试这个:

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

PHP Readline Function