通过命令行调用PHP脚本时发送请求参数

emi*_*lyk 7 php command-line

当您通过浏览器运行PHP脚本时,它看起来像

http://somewebsite.com/yourscript?param1=val1&param2=val2.
Run Code Online (Sandbox Code Playgroud)

我试图通过命令行实现相同的事情,而不必重写脚本接受argv而不是$_REQUEST.有没有办法做这样的事情:

php yourscript.php?param1=val1&param2=val2 
Run Code Online (Sandbox Code Playgroud)

这样你发送的参数会显示在$_REQUEST变量中吗?

小智 13

如果您不想修改正在运行的脚本,可以使用-B参数指定参数,以指定在输入文件之前运行的代码.但在这种情况下,您还必须添加-F标记以指定输入文件:

php -B "\$_REQUEST = array('param1' => 'val1', 'param2' => 'val2');" -F yourscript.php
Run Code Online (Sandbox Code Playgroud)


Der*_*ler 7

不,没有简单的方法可以实现这一目标.Web服务器将拆分请求字符串并将其传递给PHP解释器,然后PHP解释器将其存储在$_REQUEST数组中.

如果从命令行运行并且想要接受类似的参数,则必须自己解析它们.命令行与HTTP相比,传递参数的语法完全不同.你可能想要研究一下getopt.

对于不考虑用户错误的强力方法,您可以尝试以下代码段:

<?php
foreach( $argv as $argument ) {
        if( $argument == $argv[ 0 ] ) continue;

        $pair = explode( "=", $argument );
        $variableName = substr( $pair[ 0 ], 2 );
        $variableValue = $pair[ 1 ];
        echo $variableName . " = " . $variableValue . "\n";
        // Optionally store the variable in $_REQUEST
        $_REQUEST[ $variableName ] = $variableValue;
}
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

$ php test.php --param1=val1 --param2=val2
param1 = val1
param2 = val2
Run Code Online (Sandbox Code Playgroud)


Rob*_*ita 5

我对此一无所知,但在我的引导文件中采用了这一点:

// Concatenate and parse string into $_REQUEST
if (php_sapi_name() === 'cli') {
    parse_str(implode('&', array_slice($argv, 1)), $_REQUEST);
}
Run Code Online (Sandbox Code Playgroud)

从命令行执行PHP文件后:

php yourscript.php param1=val1 param2=val2
Run Code Online (Sandbox Code Playgroud)

上面将把键和值插入$ _REQUEST以供以后检索。