php使用file_get_contents(‘php://input‘)和$_POST的区别实例对比

本文学习目的:

为什么和第三方平台对接接口的时候,在接收http请求数据包时,一般都是用file_get_contents("php://input"),而不是用$_POST呢?

file_get_contents:将整个文件读入一个字符串

在用php写接口的时候,通常会将请求的数据通过json的形式发送到指定的请求地址处,此时的file_get_contents(‘php://input')主要是用来获取请求的原始数据。和 $HTTP_RAW_POST_DATA 比起来,php://input给内存带来的压力较小,并且不需要任何特殊的 php.ini 设置。

注意两点:

数据的提交方式应为POSTphp://input 不能用于接收enctype="multipart/form-data"表单提交的数据

1、举一个简单示例:

提交表单

<form action="" method="POST">
  姓名: <input type="text" name="name" value="tom" /><br />
  年龄:<input type="text" name="age" value="22" /><br />
  <input type="submit" value="Submit" />
</form>

后端控制器通过file_get_contents(‘php://input'),获取请求原始数据流

<?php
$content = file_get_contents('php://input', 'r');
echo $content;
//输出name=tom&age=22
?>

2、在项目应用中,如摄像头拍照,上传保存,就可以用到php://input。客户端拍照后,把图片流传送到服务端,服务端使用file_get_getcontents(‘php://input')就能获取到图片流。

$_POST

$_POST只能接收Content-Type: application/x-www-form-urlencoded提交的数据,php会将http请求body相应数据填入到数组_POST中,_POST数组中的数据是进行urldecode()解析的结果。除了该Content-Type,还有 multipart/form-data类型的表单数据也可以用$_POST接收。

四种常见的提交数据方式,分别如下:

定义和用法

enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。

enctype属性值

Content-Type值 描述
application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data
不对字符编码。

在使用包含文件上传控件的表单时,必须使用该值。

text/plain 空格转换为 "+" 加号,但不对特殊字符编码。

text/xml

一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。

总结:

1、Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form- data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST中。

2、PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA中。

3、只有Coentent-Type为multipart/form-data的时候,PHP才不会将http请求数据包中的相应数据填入php: //input,否则其它情况都会。填入的长度,由Coentent-Length指定。

4、只有Content-Type为application/x-www-data-urlencoded时,php://input数据才跟$_POST数据相一致。

5、如果不能获取的时候,比如Coentent-Type为text/xml、application/json、soap,请使用 file_get_contents('php://input');

到此这篇关于php使用file_get_contents(‘php://input‘)和$_POST的区别实例对比的文章就介绍到这了,更多相关php使用file_get_contents和$_POST内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • PHP使用fopen与file_get_contents读取文件实例分享

    php中读取文件可以使用fopen和file_get_contents这两个函数,二者之间没有本质区别,只是前者读取文件的php代码相比后者要复杂一点.本文章通过实例向大家讲解fopen和file_get_contents读取文件的实现代码.需要的码农可以参考一下. fopen读取文件的代码如下: <?php $file_name = "1.txt"; echo $file_name . " "; $fp = fopen($file_name, 'r'); /

  • php中file_get_contents()函数用法实例

    我们先来看一下php中的 file_get_contents()函数的语法 string file_get_contents(string $ filename,bool $ include_path = false,resource $ context,int $ offset = 0,int $ maxlen) filename是文件或URL的名称. include_path如果启用,则在include_path中搜索文件 context这是用于修改流的行为的选项集 offset此值指定要读

  • PHP中file_get_contents函数抓取https地址出错的解决方法(两种方法)

    方法一: 在php中,抓取https的网站,提示如下的错误内容: Warning: file_get_contents() [function.file-get-contents]: failed to open stream: Invalid argument in I:Webmyphpa.php on line 16 打开php.ini文件找到 ;extension=php_openssl.dll ,去掉双引号";" ,重启web服务器即可. apache服务器的话,可以同时启用m

  • 解决PHP curl或file_get_contents下载图片损坏或无法打开的问题

    通过curl或者file_get_contents获取抓取远程图片并且保存到本地,发现损坏了很多图片,比如访问 https://fuss10.elemecdn.com/c/6c/69a7740b4ab864ac0639eb583d68fjpeg.jpeg 是可以访问到图片的,但是curl或者file_get_contents时图片下载下来了却损坏了, 就类似这样: 原因是图片被gizp了 解决办法一: $url = 'https://fuss10.elemecdn.com/c/6c/69a774

  • PHP使用file_get_contents发送http请求功能简单示例

    本文实例讲述了PHP使用file_get_contents发送http请求功能.分享给大家供大家参考,具体如下: 服务器端模拟 POST/GET 等请求,使用 CURL 很容易办到(例如前面一篇<php使用CURL模拟GET与POST向微信接口提交及获取数据的方法>),那么如果不使用 CURL 库,又该怎么办呢? $data = array( 'test'=>'bar', 'baz'=>'boom', 'site'=>'www.nimip.com', 'name'=>'

  • php使用file_get_contents(‘php://input‘)和$_POST的区别实例对比

    本文学习目的: 为什么和第三方平台对接接口的时候,在接收http请求数据包时,一般都是用file_get_contents("php://input"),而不是用$_POST呢? file_get_contents:将整个文件读入一个字符串 在用php写接口的时候,通常会将请求的数据通过json的形式发送到指定的请求地址处,此时的file_get_contents('php://input')主要是用来获取请求的原始数据.和 $HTTP_RAW_POST_DATA 比起来,php://

  • file_get_contents("php://input", "r")实例介绍

    解释不清,直接上例子index.html 复制代码 代码如下: <form action="action.php" method="post" >  <input type="text" name="userName"  id="userName" /><br/>  <input type="text" name="userPass&q

  • php中$_POST与php://input的区别实例分析

    本文实例分析了php中$_POST与php://input的区别.分享给大家供大家参考.具体分析如下: $_POST 与 php教程://input可以取到值,$HTTP_RAW_POST_DATA 为空 $_POST 以关联数组方式组织提交的数据,并对此进行编码处理,如urldecode,甚至编码转换 php://input 也可以实现此这个功能可以获得POST的原始数据. 代码 复制代码 代码如下: echo file_get_contents( "php://input ");

  • PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析

    本文分析了PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别.分享给大家供大家参考,具体如下: $_POST:通过 HTTP POST 方法传递的变量组成的数组.是自动全局变量. $GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据.此变量仅在碰到未识别 MIME 类型的数据时产生.$HTTP_RAW_POST_DATA 对于 enctype="multipart/

  • jquery获取form表单input元素值的简单实例

    一般取值方法 $("#id").val(); $("#id").attr("value"); //其中value是元素的属性名如<s:textfield  id="cifName" key="cifName"   name="#request.consBean.cifName" />的id,key,name属性.取到的值是属性后对应双引号里面的字符. function sav

  • jquery实现input框获取焦点的简单实例

    获取表单焦点变色的简单实例 //.login-form表单样式类 //.item input输入框父div // focus是要添加的样式类 $(".login-form").on("focus", "input", function(){ $(this).closest('.item').addClass('focus'); }).on("blur","input",function(){ $(this)

  • Vue 处理表单input单行文本框的实例代码

    用vue监听单行文本框是最最最容易的事. 只需用到 v-model 就能监听. <template> <div id="app"> <input type="text" v-model="msg"> <p>{{msg}}</p> </div> </template> <script> export default { name: 'app', data

  • js与jquery获取input输入框中的值实例讲解

    如何用javascript获取input输入框中的值,js/jq通过name.id.class获取input输入框中的value 先准备一段 HTML <input type="text" name"username" id="user" placeholder="用户名" class="uusr"><br> 一.jquery获取input文本框中的值 通过 name: $('inp

  • input文本框样式代码实例

    通过css来更改所有的form的样式的方法,可以在css中定义input{color:red}textarea{border:1px solid #333}这样的格式,一般如果不需要更改所有的文本样式,可以通过下面的方法来定义文本框和密码框等样式 新建网页 1 用户名: [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  • python中input()与raw_input()的区别分析

    我们来看input的源码 def input(prompt): return eval(raw_input(prompt)) 其实input也是调用了raw_input,只是做了eval处理 而eval有什么作用呢? input:会根据用户的输入来做类型的转换 raw_input:则会把用户的输入都作为一个字符串来处理 下面是详细的补充: 首先,我们知道input()和raw_input()都是用来获取控制台的输入,当然输入的时候可以加上输入提示信息: 复制代码 代码如下: a = raw_in

随机推荐