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

时间:2011-04-13 20:34:53

标签: post command-line-interface php http-post-vars

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

很遗憾,我的Ubuntu找不到libapache2-mod-php5

3 个答案:

答案 0 :(得分:43)

我一直在寻找解决方案,因为这是谷歌的第一次打击。 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'

玩得开心!

答案 1 :(得分:17)

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

答案 2 :(得分:3)

使用curl发布数据
curl --data" name = ii" "参数1 =值1&安培; param2的=值2" http://test.com/sample.php