如何从命令行将参数传递到php-script中的$ _POST?

问题描述 投票:30回答:3

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

不幸的是,我找不到Ubuntu的libapache2-mod-php5

post command-line-interface php http-post-vars
3个回答
18
投票

这不容易做到。您可以调用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 

Note:不足,不能那样工作。但是类似的东西...


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

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

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


47
投票

我正在为此寻找解决方案,因为这是Google的第一招。 The second one对我来说还是有用的,因为如果您可以访问PHP脚本并可以对其进行更改,那么它是一个非常简单的解决方案。

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

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

这小段代码可以解决问题(您可以决定是否要使用$ _GET或$ _POST,或者像我需要的那样使用。更改脚本后,您可以在命令行中通过传递args来调用它:

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

玩得开心!


2
投票
curl --data "name=ii" "param1=value1&param2=value2" http://test.com/sample.php
© www.soinside.com 2019 - 2024. All rights reserved.