php://input和$_post的区别是什么?
php  /  管理员 发布于 7年前   222
php://input和$_post的区别是什么?下面本篇文章给大家介绍一下。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
手册中摘取的几句话:
验证下:
post.html
<!DOCTYPE html><html><head> <title></title></head><body> <form action="getpost.php" method="post"> <input type="text" name="name" value="saisai"> <input type="submit" name="submit" value="submit"> </form></body></html>
getpost.php
<?php echo "----------input--------<br />"; var_dump(file_get_contents('php://input', 'r')); echo "----------post---------<br />"; var_dump($_POST);?>
一、enctype="application/x-www-form-urlencoded"
请求主体:
Content-Type: application/x-www-form-urlencodedContent-Length: 25name=saisai&submit=submit
输出:
----------input--------string 'name=saisai&submit=submit' (length=25)----------post---------array (size=2) 'name' => string 'saisai' (length=6) 'submit' => string 'submit' (length=6)
小结:当enctype="application/x-www-form-urlencoded"时,请求主体(request body)中的数据(name=saisai&submit=submit)转换成关联数组放入$_POST,而 php://input 则获取的是原始数据(raw data)。
二、enctype=“multipart/form-data”时
2.1 表单:
<form action="getpost.php" method="post" enctype="multipart/form-data"> <input type="text" name="name" value="saisai"> <input type="submit" name="submit" value="submit"> </form>
请求主题:
Content-Type: multipart/form-data; boundary=---------------------------22554656810024Content-Length: 249-----------------------------22554656810024Content-Disposition: form-data; name="name"saisai-----------------------------22554656810024Content-Disposition: form-data; name="submit"submit-----------------------------22554656810024--
输出:
----------input--------string '' (length=0)----------post---------array (size=2) 'name' => string 'saisai' (length=6) 'submit' => string 'submit' (length=6)
小结:在enctype="multipart/form-data" 且没有上传文件控件时,$_POST 能正常打印数据,php:// 无效。
2.2 表单(添加一个文件上传):
<form action="getpost.php" method="post" enctype="multipart/form-data"> <input type="text" name="name" value="saisai"> <input type="submit" name="submit" value="submit"> </form>
请求主题:
Content-Type: multipart/form-data; boundary=---------------------------272321281228527Content-Length: 68386-----------------------------272321281228527Content-Disposition: form-data; name="name"saisai-----------------------------272321281228527Content-Disposition: form-data; name="filename"; filename="dog.png"Content-Type: image/png 一堆乱码 -----------------------------272321281228527Content-Disposition: form-data; name="submit"submit-----------------------------272321281228527--
输出:
----------input--------string '' (length=0)----------post---------array (size=2) 'name' => string 'saisai' (length=6) 'submit' => string 'submit' (length=6)
小结:在enctype="multipart/form-data" 且有上传文件控件时,$_POST 能打印出传入的数据,但是排除了上传的任何内容。php:// 无效。
三、enctype="text/plain"
表单:
<form action="getpost.php" method="post" enctype="text/plain"> <input type="text" name="name" value="saisai"> <input type="submit" name="submit" value="submit"></form>
请求主体:
Content-Type: text/plainContent-Length: 28name=saisaisubmit=submit
输出:
----------input--------string 'name=saisaisubmit=submit' (length=28)----------post---------array (size=0) empty
小结:enctype="text/plain"时,$_POST中没有内容,php://input中以键值对的方式存放。
总结:
当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data :php://input 中是形同 a=1&b=2的原始数据。$_POST 中是关联数组,且没有上传控件的内容。
php://input 是个可以访问请求的原始数据的只读流。 enctype="multipart/form-data" 的时候php://input 是无效的。
$_POST 不能获取 Content-Type = "text/plain"时 post的数据, php://input可以。
更多相关知识,请关注 !!
以上就是php://input和$_post的区别是什么?的详细内容,更多请关注其它相关文章!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号