如何在PHP脚本中将参数从命令行传递到$_POST


How can I pass parameters from the command line to $_POST in a PHP script?

我知道这听起来有点奇怪,但是我需要向$_POST数组传递一些参数。类似于Apache或任何其他web服务器的方式。

不幸的是,我在任何地方都找不到libapache2-mod-php5用于我的Ubuntu安装。

只需在脚本开头插入以下行:

/* If started from the command line, wrap parameters to $_POST and $_GET */
if (!isset($_SERVER["HTTP_HOST"])) {
  parse_str($argv[1], $_GET);
  parse_str($argv[1], $_POST);
}

这一小段代码完成了任务(您可以决定是使用$_GET还是$_POST,或者像我需要的那样,两者都使用)。

修改脚本后,您可以通过参数从命令行调用它:

php yourscript.php 'arg1=x&arg2=y'

这不容易做到。您可以调用php-cgi二进制文件并通过管道发送一个虚假的POST请求。但是你需要设置大量的CGI环境变量:

echo 'var1=123&var2=abc' | REQUEST_METHOD=POST  SCRIPT_FILENAME=script.php REDIRECT_STATUS=CGI CONTENT_TYPE=application/www-form-urlencoded php-cgi 

注意:不充分,不能这样工作。但是像这样的…


如果您只是修补脚本,并让它从预定义的环境变量加载$_POST数组,这当然更容易。

$_POST = parse_url($_SERVER["_POST"]);

为了简单起见,您可以像_POST=var=123 php script.php那样调用它

curl --data "name=ii" "param1=value1&param2=value2" http://test.com/sample.php