为啥 PHP 不使用传递的参数填充 $_POST?

Posted

技术标签:

【中文标题】为啥 PHP 不使用传递的参数填充 $_POST?【英文标题】:Why doesn't PHP populate $_POST with the passed parameters?为什么 PHP 不使用传递的参数填充 $_POST? 【发布时间】:2022-01-22 02:54:05 【问题描述】:

我用 NodeJS 用 Ja​​vaScript 编写了一个简单的 Web 服务器。我有一个问题,php 没有使用传递的参数填充 $_POST。我已经实现的是,$_GET 填充了传递的参数。

process.env["GATEWAY_INTERFACE"] = "CGI/1.1";
process.env["SCRIPT_FILENAME"] = path.resolve(resource);
process.env["REQUEST_METHOD"] = request[0];
process.env["REDIRECT_STATUS"] = 200;
process.env["QUERY_STRING"] = queryString;
process.env["CONTENT_LENGTH"] = queryString.length;
process.env["CONTENT_TYPE"] = "application/x-www-form-urlencoded";

content = execSync(phpPath +"php-cgi", process.env);

但是 print_r($_POST) 给了我 Array ( )。如果我使用 GET 它可以工作并且参数在 $_GET 中。我的假设是,问题出在环境变量的某个地方。 queryString.length 是浏览器给定的 POST 参数的大小

【问题讨论】:

【参考方案1】:

我让它工作了。我不得不将查询字符串作为 php-cgi 的标准输入输入:

content = execSync(phpPath +"php-cgi",  env: process.env, input: queryString );

这仅适用于 POST,这就是为什么我现在检查 POST 和 GET 并相应地设置方法

【讨论】:

以上是关于为啥 PHP 不使用传递的参数填充 $_POST?的主要内容,如果未能解决你的问题,请参考以下文章

php参数传递的常用方法详解

关于PHP中POST传递参数问题

php怎么传递参数

为啥复选框状态并不总是传递给 PHP 脚本?

为啥网页不能正常跳转(在线等-------)

php href 传递参数问题