PHP 输入流 php://input

转载至:https://phper.shujuwajue.com/shu-zu/shu-ru-liu-php-input

$_POST 与 php://input

  • 仅在取值为application/x-www-data-urlencodedmultipart/form-data时(文件上传时),php会将http请求body相应数据会填入到数组$_POST,填入到$_POST数组中的数据是进行urldecode()解析的结果。
  • 只要Content-Type不为multipart/form-dataphp://input会填入post数据。
  • 仅当Content-Typeapplication/x-www-form-urlencoded且提交方法是POST方法时,$_POST数据与php://input数据才是一致的。

$HTTP_RAW_POST_DATA 与 php://input

php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小。
$HTTP_RAW_POST_DATA(This feature has been DEPRECATED as of PHP 5.6.0. 被废弃了,查看 官方文档
更多php://input,查看 官方文档

解析

var_dump($_POST);
echo file_get_contents("php://input");

情况1: 文件上传时,form的enctype="multipart/form-data",此时,数据php://input获取不到数据

<form enctype="multipart/form-data" method="post">
<input type="text" name="name" />
<input type="file" name="csv_file" />
<button type="submit" name="submit" value="Submit">Submit</button>
</form>

<?php
var_dump($_POST);
echo "<br>";
var_dump(file_get_contents("php://input"));

测试结果:只有$_POST获取了数据

array (size=2)
'name' => string 'test' (length=4)
'submit' => string 'Submit' (length=6)

情况2: 非文件上传时的form表单

<form method="post">
name:<input type="text" name="name" /><br>
age:<input type="text" name="age" />
<button type="submit" name="submit" value="Submit">Submit</button>
</form>

<?php
echo '$_POST result:<br>';
var_dump($_POST);
echo "<br>";
echo 'php://input result:<br>';
var_dump(file_get_contents("php://input"));

测试结果:两者都会获取数据

$_POST result:
array (size=3)
  'name' => string 'revin' (length=5)
  'age' => string '28' (length=2)
  'submit' => string 'Submit' (length=6)

php://input result:
string 'name=revin&age=28&submit=Submit' (length=31)

情况3:postman 直接发送json body 体,也就是api的场景

测试结果:只有php://input获取到了数据

上一篇 Jenkins打包Android
下一篇 9个基于Java的搜索引擎框架
目录
文章列表
1 JWT InvalidClaimException - The Token can't be used before
JWT InvalidClaimException - The Token can't be used before
2
解决Vagrant中的CentOS主机无法ssh远程连接的问题
解决Vagrant中的CentOS主机无法ssh远程连接的问题
3
Gradle 实现一键部署 SpringBoot 应用到 Docker
Gradle 实现一键部署 SpringBoot 应用到 Docker
4
Swift - 自定义函数规则说明
Swift - 自定义函数规则说明
5
Android RSA与Java RSA加密不同标准产生问题的解决方法
Android RSA与Java RSA加密不同标准产生问题的解决方法
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。