当您通过浏览器运行 PHP 脚本时,它看起来像
http://somewebsite.com/yourscript?param1=val1¶m2=val2.
我试图通过命令行来实现同样的事情,而不必重写脚本来接受argv
而不是$_REQUEST
. 有没有办法做这样的事情:
php yourscript.php?param1=val1¶m2=val2
这样您发送的参数会显示在$_REQUEST
变量中吗?
当您通过浏览器运行 PHP 脚本时,它看起来像
http://somewebsite.com/yourscript?param1=val1¶m2=val2.
我试图通过命令行来实现同样的事情,而不必重写脚本来接受argv
而不是$_REQUEST
. 有没有办法做这样的事情:
php yourscript.php?param1=val1¶m2=val2
这样您发送的参数会显示在$_REQUEST
变量中吗?
如果您不想修改运行脚本,可以使用 in -B 参数指定参数以指定要在输入文件之前运行的代码。但在这种情况下,您还必须添加 -F 标记来指定您的输入文件:
php -B "\$_REQUEST = array('param1' => 'val1', 'param2' => 'val2');" -F yourscript.php
不,没有简单的方法可以实现这一目标。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;
}
像这样使用它:
$ php test.php --param1=val1 --param2=val2
param1 = val1
param2 = val2
我不能对此表示赞赏,但我在我的引导文件中采用了这个:
// Concatenate and parse string into $_REQUEST
if (php_sapi_name() === 'cli') {
parse_str(implode('&', array_slice($argv, 1)), $_REQUEST);
}
从命令行执行 PHP 文件后:
php yourscript.php param1=val1 param2=val2
上面会将键和值插入 $_REQUEST 以供以后检索。
我编写了一个简短的函数来处理这种情况——如果存在命令行参数并且 $_REQUEST 数组为空(即,当您从命令行而不是通过 Web 界面运行脚本时),它会查找命令键=值对中的行参数,
Argv2Request($argv);
print_r($_REQUEST);
function Argv2Request($argv) {
/*
When $_REQUEST is empty and $argv is defined,
interpret $argv[1]...$argv[n] as key => value pairs
and load them into the $_REQUEST array
This allows the php command line to subsitute for GET/POST values, e.g.
php script.php animal=fish color=red number=1 has_car=true has_star=false
*/
if ($argv !== NULL && sizeof($_REQUEST) == 0) {
$argv0 = array_shift($argv); // first arg is different and is not needed
foreach ($argv as $pair) {
list ($k, $v) = split("=", $pair);
$_REQUEST[$k] = $v;
}
}
}
函数注释中建议的示例输入是:
php script.php animal=fish color=red number=1 has_car=true has_star=false
产生输出:
Array
(
[animal] => fish
[color] => red
[number] => 1
[has_car] => true
[has_star] => false
)