$data = file_get_contents("php://input");
    php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候 php://input 是无效的。 
    
 
1, php://input 可以读取http entity body中指定长度的值,由Content-Length指定长度,不管是POST方式或者GET方法提交过来的数据。但是,一般GET方法提交数据 时,http request entity body部分都为空。 
2,php://input 与$HTTP_RAW_POST_DATA读取的数据是一样的,都只读取Content-Type不为multipart/form-data的数据。
 
学习笔记
 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,php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input比$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini 
 6,PHP会将PATH字段的query_path部分,填入全局变量$_GET。通常情况下,GET方法提交的http请求,body为空。
例子
 1.php用file_get_contents("php://input")或者$HTTP_RAW_POST_DATA可以接收xml数据
 比如:

  1. getXML.php;//接收XML地址
  2.  
  3. <?php
  4. $xmldata = file_get_contents("php://input");
  5. $data = (array)simplexml_load_string($xmldata);
  6. ?>
 
  这里的$data就是包含xml数据的数组,具体php解析xml数据更新详细的方法
  sendXML.php
 
  1. <?php
  2. $xml = '<xml>xmldata</xml>';//要发送的xml
  3. $url = 'http://localhost/test/getXML.php';//接收XML地址
  4.  
  5. $header = 'Content-type: text/xml';//定义content-type为xml
  6. $ch = curl_init(); //初始化curl
  7. curl_setopt($ch, CURLOPT_URL, $url);//设置链接
  8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置是否返回信息
  9. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//设置HTTP头
  10. curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式
  11. curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);//POST数据
  12. $response = curl_exec($ch);//接收返回信息
  13. if(curl_errno($ch)){//出错则显示错误信息
  14. print curl_error($ch);
  15. }
  16. curl_close($ch); //关闭curl链接
  17. echo $response;//显示返回信息
  18. ?>
 2.一个手机上传图片到服务器的小程序
  上传文件
   
  1. <?php
  2. //@file phpinput_post.php
  3. $data=file_get_contents('btn.png');
  4. $http_entity_body = $data;
  5. $http_entity_type = 'application/x-www-form-urlencoded';
  6. $http_entity_length = strlen($http_entity_body);
  7. $host = '127.0.0.1';
  8. $port = 80;
  9. $path = '/p_w_picpath.php';
  10. $fp = fsockopen($host, $port, $error_no, $error_desc, 30);
  11. if ($fp){
  12. fputs($fp, "POST {$path} HTTP/1.1\r\n");
  13. fputs($fp, "Host: {$host}\r\n");
  14. fputs($fp, "Content-Type: {$http_entity_type}\r\n");
  15. fputs($fp, "Content-Length: {$http_entity_length}\r\n");
  16. fputs($fp, "Connection: close\r\n\r\n");
  17. fputs($fp, $http_entity_body . "\r\n\r\n");
  18.  
  19. while (!feof($fp)) {
  20. $d .= fgets($fp, 4096);
  21. }
  22. fclose($fp);
  23. echo $d;
  24. }
  25. ?>
  接收文件
  
  1. <?php
  2. /**
  3. *Recieve p_w_picpath data
  4. **/
  5. error_reporting(E_ALL);
  6.  
  7. function get_contents() {
  8. $xmlstr= file_get_contents("php://input");
  9. $filename=time().'.png';
  10. if(file_put_contents($filename,$xmlstr)){
  11. echo 'success';
  12. }else{
  13. echo 'failed';
  14. }
  15. }
  16. get_contents();
  17. ?>

  

 3.获取HTTP请求原文
  
  1. /**
  2. * 获取HTTP请求原文
  3. * @return string
  4. */
  5. function get_http_raw() {
  6. $raw = '';
  7.  
  8. // (1) 请求行
  9. $raw .= $_SERVER['REQUEST_METHOD'].' '.$_SERVER['REQUEST_URI'].' '.$_SERVER['SERVER_PROTOCOL']."\r\n";
  10.  
  11. // (2) 请求Headers
  12. foreach($_SERVER as $key => $value) {
  13. if(substr($key, 0, 5) === 'HTTP_') {
  14. $key = substr($key, 5);
  15. $key = str_replace('_', '-', $key);
  16.  
  17. $raw .= $key.': '.$value."\r\n";
  18. }
  19. }
  20.  
  21. // (3) 空行
  22. $raw .= "\r\n";
  23.  
  24. // (4) 请求Body
  25. $raw .= file_get_contents('php://input');
  26.  
  27. return $raw;
  28. }

  转载:https://blog.51cto.com/taoshi/1165499

file_get_contents("php://input")的更多相关文章

  1. **对比$_POST、$GLOBALS['HTTP_RAW_POST_DATA']和file_get_contents('php://input')

    最近在开发微信接口,又学到了一些新的技术点,今天就把学到的关于接收数据的技术点给简单的罗列下. public function __construct($token, $wxuser = ''){ $ ...

  2. (转载)file_get_contents("php://input")

    (转载)http://taoshi.blog.51cto.com/1724747/1165499 $data = file_get_contents("php://input"); ...

  3. file_get_contents("php://input")的使用方法

    $data = file_get_contents("php://input"); //input 是个可以访问请求的原始数据的只读流. POST 请求的情况下,最好使用 php: ...

  4. file_get_contents('php://input') 和POST的区别

    之前记得写过这2者的区别,今天看群里有个朋友也提出了怪异的问题,说是“file_get_contents('php://input')获取不到curl post请求的数据的问题”?其实这并不是所谓的& ...

  5. file_get_contents("php://input")的用法

    $data = file_get_contents("php://input"); php://input 是个可以访问请求的原始数据的只读流. POST 请求的情况下,最好使用 ...

  6. 【转】file_get_contents("php://input")的使用方法

    $data = file_get_contents("php://input");    php://input 是个可以访问请求的原始数据的只读流. POST 请求的情况下,最好 ...

  7. file_get_contents('php://input') 数据如何转换成数组

    前台表单页:demo01.html 后台:demo01.php 输出结果: 备注:若前台通过Ajax的post提交过来的是json数据,需要对json数据进行解析:$data = json_decod ...

  8. 关于postman中表单提交与数据包提交的问题,file_get_contents("php://input")可以获取数据,$_POST不能获取数据

    Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form-data两种情况下,PHP才会将http请求数据包中相应的数据填入 ...

  9. php中的 file_get_contents(‘php://input’)

    今天用CI框架整合微信发现了一个没见过的 file_get_contents('php://input'); 这个家伙是干嘛用的,然后自己直接写了验证的代码.好吧 废话不多说直接看下面的代码. < ...

随机推荐

  1. gin 页面重定向

    两种gin页面重定向方式 redirect: package main import ( "github.com/gin-gonic/gin" "net/http&quo ...

  2. mysql的左连接问题

    之前写过一个mysql语句,功能是将一个表ds的一个字段值同步更新到另一个表bk的字段,不过不是全部,只更新表bk中有的数据,如果表bk中有而表ds中没有,表B对应的这个字段值就为空 UPDATE b ...

  3. openwrt配置strongswan对接hillstone ipsec的笔记

    一.主要参考资料: https://openwrt.org/docs/guide-user/services/vpn/ipsec/strongswan/roadwarrior https://open ...

  4. CentOS7.5安装python-pip报Error: Nothing to do解决方法

    python中的一个十分好用的包管理工具python-pip是我们使用python必不可少的一件工具.但是在CentOS7安装时候却报Error: Nothing to do: [root@bnsf- ...

  5. js对属性的操作

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 华为云PaaS首席科学家:Cloud Native +AI,企业数字化转型的最佳拍档

    近日,在2019华为全球分析师大会期间,华为云PaaS首席科学家熊英博士在+智能,见未来(华为云&大数据)的分论坛上,从云计算行业发展谈起,深入云原生发展趋势,对华为云智能应用平台做了深度解读 ...

  7. 通过visual studio制作类库的文档

    java的集成开发工具,可以导出jar的文档. visual studio 也可以生成类库的文档,邮件项目属性,生成,输出下,选择XML文档文件.然后生成项目,就会再bin下面生成一个xml文件. 将 ...

  8. 32位JVM和64位JVM的最大堆内存分别是多数?32位和64位的JVM,int类型变量的长度是多数?

    理论上说上 32 位的 JVM 堆内存可以到达 2^32,即 4GB,但实际上会比这个小很多.不同操作系统之间不同,如 Windows 系统大约 1.5 GB,Solaris 大约 3GB.64 位 ...

  9. tomcat访问manager

    在配置好Tomcat7/8后,我们往往需要访问Tomcat7/8的Manager以及Host Manager.就需要在tomcat-users.xml中配置用户角色来实现.在地址栏输入:localho ...

  10. 《The One !团队》:BETA Scrum metting2

    项目 内容 作业所属课程 所属课程 作业要求 作业要求 团队名称 < The One !> 作业学习目标 (1)掌握软件黑盒测试技术:(2)学会编制软件项目总结PPT.项目验收报告:(3) ...