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

had*_*des 30 php post command-line-interface http-post-vars

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

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

Sch*_*ngi 47

我一直在寻找解决方案,因为这是谷歌的第一次打击.第二个对我有用,因为它有一个非常简单的解决方案,如果你有权访问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);
}
Run Code Online (Sandbox Code Playgroud)

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

php yourscript.php 'arg1=x&arg2=y'
Run Code Online (Sandbox Code Playgroud)

玩得开心!

  • 这就像一个魅力.我实际上正在使用Zend的Eclipse版本.我根据Zend的文档创建了一个调试配置文件,并添加了PHP Script Arguments.我把你的代码放在PHP脚本和中提琴的顶部!它将存储在$ argv []中的参数解析为_POST数组.很多! (2认同)

mar*_*rio 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 
Run Code Online (Sandbox Code Playgroud)

注意:不够,不能那样工作.但是那样的......


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

$_POST = parse_url($_SERVER["_POST"]);
Run Code Online (Sandbox Code Playgroud)

然后你可以像_POST=var=123 php script.php简单一样调用它.

  • 哇酷.我承认我没有让这个为自己工作:| (2认同)