如何在PHP脚本中将参数从命令行传递到$\u POST?

如何在PHP脚本中将参数从命令行传递到$\u POST?,post,command-line-interface,php,http-post-vars,Post,Command Line Interface,Php,Http Post Vars,我知道这听起来有点奇怪,但我需要向数组传递一些参数。类似于它的方式,或任何其他web服务器 不幸的是,我在任何地方都找不到安装libapache2-mod-php5的。这不容易做到。您可以调用PHPCGI二进制文件,并通过管道发送一个伪POST请求。但您需要设置大量CGI环境变量: echo 'var1=123&var2=abc' | REQUEST_METHOD=POST SCRIPT_FILENAME=script.php REDIRECT_STATUS=CGI CONTENT_T

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


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

这不容易做到。您可以调用
PHPCGI
二进制文件,并通过管道发送一个伪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 
注意:不足,不能那样工作。但是像这样的事情


如果只修补脚本,让它从预定义的环境变量加载$\u POST数组,肯定会更容易

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

然后,为了简单起见,您可以像调用
\u POST=var=123 php script.php那样调用它。

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

curl --data "name=ii" "param1=value1&param2=value2" http://test.com/sample.php
/* 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);
}
这一小段代码就起到了作用(您可以决定是使用还是,就像我需要的那样,两者都使用)

更改脚本后,可以通过命令行调用脚本并传递参数:

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

请参阅,它应该被合并。这与cURL无关。其规范是ID5647461,“如何使用PHP发送POST请求?”。这比仅仅使用cURL有什么好处?@Neal:问题不是调用URL的POST请求,而是直接在脚本上。这很有魅力。我实际上使用的是Zend版本的Eclipse。我根据Zend的文档创建了一个调试配置文件,并添加了PHP脚本参数。我将您的代码放在PHP脚本和vio的顶部la!它将存储在$argv[]中的参数解析到了_POST数组中。太棒了!!!对我来说不太像(W10 OS)$\u GET/$\u POST数组的单引号必须用双引号替换。未定义的索引:REQUEST\u方法似乎无法与filter\u输入(input\u POST,…)一起正常工作OP没有要求curl我看没有理由否决这个。OP没有要求curl,但他也不是很具体,这个答案肯定有效。这也很简单。投票结果是向上的。curl必须通过web服务器,他明确表示他没有使用服务器。