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

标签 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);

如何从标准输入读取这两个变量?

最佳答案

您在命令时传递的参数将在全局 $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/

相关文章:

java - 在 Java Main 方法的命令行参数中指定 "Usage"的正确方法是什么?

postgresql - Liquibase 差异 - 驱动程序问题

windows - 如何使用 Windows 批处理文件从文本文件中提取数字?

php - 我可以避免 MySQL 注入(inject)吗?

php - Symfony 表单类型选择字段 bool 值始终为真

PHP:iPad 不播放 PHP 提供的 MP4 视频,但如果直接访问它可以

mongodb - sudo chown -R `id -u`/data/db 的含义

command-line - 命令行参数存储在哪里?

php - 将数组的所有行插入MySql表 - Codeigniter相关

php - 在 Magento 中获取优惠券代码的客户名称