在 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);
如何从标准输入读取这两个变量?
最佳答案
您在命令时传递的参数将在全局 $argv
以及 super 全局 $_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
这些是调用时传递的实际命令行参数。我希望这会有所帮助。
关于PHP 在命令行中获取多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13866675/