PHP接收POST数据时$_GET、$_POST、$_REQUEST为空,如何解决?

今天下午在公司项目中遇到了一个奇怪的问题。
一位同事突然走过来问我:“小王,为什么我发的数据没有反应?”我看了一下他提交的表格,输入了一些信息,然后单击了提交按钮。
打开开发者工具,发现$_GET、$_POST、$_REQUEST没有数据。
这让我有点困惑,因为我们以前从未遇到过这种情况。

等一下,我想我刚才在某个地方看到了类似的问题。
记得去年在一个项目中,前端同事发送JSON格式的数据,结果这些超全局变量都是空的。
我当时查了一下,是因为Content-Type header设置不正确,PHP没有正确解析JSON数据。

我检查了同事的请求标头,果然,Content-Type 为空。
我让他使用Postman重新发送请求。
这次在请求头中明确指定Content-Type为application/json,数据成功传输到后端。

我突然想到还有一件事。
我们公司最近更换了服务器。
会不会是服务器配置问题?我打开phpinfo(),看到了一些与POST相关的配置项。
我发现post_max_size的值设置得比较小,就2 M。
我们之前发送的数据很大,可能已经被截断了。

所以,我决定先编辑php.ini文件,稍微增加post_max_size的值。
更改配置后,我让同事再试一次,这次发送的数据接收成功。

唉,搞了一天,这些细节真是头疼啊。
不过,解决问题也算是一种成长。
下次遇到类似的问题时,我应该能够更快地修复它。

PHP $_POST接收数据时出现“Undefined array key”错误:如何排查及解决?

上星期。
我的那个朋友。
遇到此 Undefinedarraykey 错误。
很烦人。

2 02 3 大概是三月。
他正在调试 PHP 接口。
这个错误是在后台直接报错的。

核心原因。
它位于 $_POST 数组中。
没有 pageinfo 键。
或者前端没有发布。
要么是后端没有正确处理。

他首先检查前端。
使用浏览器开发者工具查看。
网络选项卡。
在Ajax请求中发现。
数据属性写错了。
日期被写入数据。

数据格式也有问题。
前端没有按照后端要求的格式发送。
要么是URL编码。
要么 JSON.
他改了前端代码。
将日期更改回页面信息。
数据格式也已标准化。
使用 $.param() 转换为 URL 编码。

后端也已更改。
使用 file_get_contents('php://input')。
读取原始数据。
然后json_decode分析。

尝试一下。
果然解决了。
这次 $_POST['pageinfo'] 有值了。

稍后。
他添加了鲁棒性处理。
使用 isset() 检查密钥是否存在。
还兼容 JSON 格式。

现在。
即使前端偶尔会发送错误。
或者格式改变了。
后台也可以正常处理。

我不确定这部分。
他的SQL查询有问题吗? 他说可能是查询失败了。
返回错误。

算了。
无论如何,问题解决了。
代码也更加健壮。

php://input和$_post的区别是什么?

嘿,你的上衣很详细,但我要和你说得更简单。
上周一位顾客问我这个问题。
创建了文件接口文件,但在$_POST中没有发现文件。
PHP认为很愚蠢。
我查了一下,哦哈哈,原来是我没有理解php://input和$_POST的区别。

我想,这两个最有用的是什么?一个是原始实例的主体,另一个是数据的解析形式。

先说说php://input。
这个东西是直接在原始HTTP请求的数据上播放的。
无论您是什么内容类型,您都会收到一切。
上次在上海面试该公司时,面试官就问过这个问题。
我直接说application/x-www-form-urlencoded会帮你转成字符串,multipart/form-data会帮你转成字符串(当然如果文件加载完了就忽略,直接返回空)。
哪个场景最合适?例如,您需要解析非格式数据,或者内容类型不是 application/x-format-urlencoded 或 multipart/format-data。
如果你上传了一堆文件,使用这个对象是无法获取文件的,所以可以使用$_FILES。

S报告$_POST 这是因为PHP帮你解析表单数据,但有一个前提条件,即Content Type为application/x-www-form-urlencoded或multipart/form-data(这两个文件都不能上传)。
如果您使用文本/平面,它将忽略它并给您一个空数组。
我在深圳做设计的时候,遇到过一个以前传文字/平面笔记的老人。
结果,$_POST 为空。
我以为代码写错了。
当发布 multipart/format-data 文件时,$_POST 只提供非文件字段,文件数据在 $_FILES 中找到。
这两者必须一起使用。

举个例子 1 . application/x-www-form-urlencoded:
php://input:给你原来的字符串name=value&submit=submit。

$_POST:给你解析后的数组 ['name' => 'value', 'submit' => 'submit']。

2 多部分/表单数据文件 文件号
$_POST:给你正常的数据格式。

php://input:给你一个空字符串。

3 加载多部分/格式数据文件:
$_POST:给出非唯一字段。

$_FILES:给你一个文件。

php://input:给你一个空字符串。

4 文本/纯文本。

php://input:给你原来的字符串name=valuesubmit=submit。

$_POST:给你一个空数组。

如果您想进行自定义解析或非格式化数据,请使用 php://input。
对于标准格式数据部分,请使用 $_POST,但请记住将文件与 $_FILES 一起链接。
你明白了吗?无论如何,这取决于你,我还在考虑这个......

php中put和post的区别是什么

结论:PHP中的PUT比POST效率更高,适合大文件传输,但必须手动处理临时文件。