$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数据 比如: getXML.php;//接收XML地址

​<?php $xmldata = file_get_contents("php://input"); $data = (array)simplexml_load_string($xmldata);
?> ​

这里的$data就是包含xml数据的数组,具体php解析xml数据更新详细的方法 sendXML.php

<?php $xml = '<xml>xmldata</xml>';//要发送的xml $url = 'http://localhost/test/getXML.php';//接收XML地址 $header = 'Content-type: text/xml';//定义content-type为xml $ch = curl_init(); //初始化curl curl_setopt($ch, CURLOPT_URL, $url);//设置链接 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置是否返回信息 curl_setopt($ch, CURLOPT_HTTPHEADER, $header);//设置HTTP头 curl_setopt($ch, CURLOPT_POST, 1);//设置为POST方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);//POST数据 $response = curl_exec($ch);//接收返回信息 if(curl_errno($ch)){//出错则显示错误信息 print curl_error($ch); } curl_close($ch); //关闭curl链接 echo $response;//显示返回信息
?> 

2.一个手机上传图片到服务器的小程序

上传文件

<?php //@file phpinput_post.php $data=file_get_contents('btn.png'); $http_entity_body = $data; $http_entity_type = 'application/x-www-form-urlencoded'; $http_entity_length = strlen($http_entity_body); $host = '127.0.0.1'; $port = 80; $path = '/image.php'; $fp = fsockopen($host, $port, $error_no, $error_desc, 30); if ($fp){ fputs($fp, "POST {$path} HTTP/1.1\r\n"); fputs($fp, "Host: {$host}\r\n"); fputs($fp, "Content-Type: {$http_entity_type}\r\n"); fputs($fp, "Content-Length: {$http_entity_length}\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $http_entity_body . "\r\n\r\n"); while (!feof($fp)) { $d .= fgets($fp, 4096); } fclose($fp); echo $d; }
?> 

接收文件

<?php /** *Recieve image data **/    error_reporting(E_ALL); function get_contents() {    $xmlstr= file_get_contents("php://input"); $filename=time().'.png'; if(file_put_contents($filename,$xmlstr)){ echo 'success'; }else{ echo 'failed'; } } get_contents();
?>

3.获取HTTP请求原文

<?php
/*** 获取HTTP请求原文* @return string*/
function get_http_raw() {$raw = '';// (1) 请求行 $raw .= $_SERVER['REQUEST_METHOD'].' '.$_SERVER['REQUEST_URI'].' '.$_SERVER['SERVER_PROTOCOL']."\r\n";// (2) 请求Headers foreach($_SERVER as $key => $value) {if(substr($key, 0, 5) === 'HTTP_') {$key = substr($key, 5);$key = str_replace('_', '-', $key);$raw .= $key.': '.$value."\r\n";}}// (3) 空行 $raw .= "\r\n";// (4) 请求Body $raw .= file_get_contents('php://input');return $raw;
}

PHP中file_get_contents的使用方法相关推荐

  1. php中file_get_contents如何读取大容量文件

    php中file_get_contents如何读取大容量文件 一.总结 一句话总结:使用file_get_contents()进行分段读取,file_get_contents()函数可以分段读取 1. ...

  2. php去除每行的重复文本,php删除文本文件中重复行的方法

    本文实例讲述了php删除文本文件中重复行的方法.分享给大家供大家参考.具体分析如下: 这个php函数用来删除文件中的重复行,还可以指定是否忽略大小写,和指定换行符 ?12345678910111213 ...

  3. php显示网络图片,php中显示图片的方法

    php中显示图片的方法 发布时间:2020-08-25 14:08:07 来源:亿速云 阅读:80 作者:小新 这篇文章给大家分享的是有关php中显示图片的方法的内容.小编觉得挺实用的,因此分享给大家 ...

  4. 爬取html数据中文乱码,解决PHP中file_get_contents抓取网页中文乱码问题

    根据网上有朋友介绍说原因可能是服务器开了GZIP压缩. 下面是用firebug查看我的博客的头信息,Gzip是开了的. 请求头信息原始头信息 代码如下 复制代码 Accept text/html,ap ...

  5. stream map方法_Java Stream中map和flatMap方法

    最近看到一篇讲stream语法的文章,学习Java中map()和flatMap()方法之间的区别. 虽然看起来这两种方法都做同样的事情,都是做的映射操作,但实际上差之毫厘谬以千里. 通过演示Demo中 ...

  6. java中json重复数据结构_JS实现去除数组中重复json的方法示例

    本文实例讲述了JS实现去除数组中重复json的方法.分享给大家供大家参考,具体如下: var array = [{"name":"123"},{"na ...

  7. 继承实现的原理、子类中调用父类的方法、封装

    一.继承实现的原来 1.继承顺序 Python的类可以继承多个类.继承多个类的时候,其属性的寻找的方法有两种,分别是深度优先和广度优先. 如下的结构,新式类和经典类的属性查找顺序都一致.顺序为D--- ...

  8. 浅谈在ASP.NET中数据有效性校验的方法

    作者:未知 作为一名程序员,一定要对自己编写的程序的健壮性负责,因此数据的校验无论在商业逻辑还是系统实现都是必不可少的部分. 我这里总结了一种自认为比较不错的asp.net(C#)的数据校验方法,如大 ...

  9. JavaScript文件中调用AngularJS内部方法或改变$scope变量

    需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过controll ...

最新文章

  1. mysql select语句详解_mysql学习笔记之完整的select语句用法实例详解
  2. 2021年春季学期-信号与系统-第二次作业参考答案-第九小题
  3. 由华为提供现网商用平台的IPTV业务亮相深圳文博会
  4. Scrum联盟发布《2016年度Scrum状态调查报告》
  5. Autocad下载 安装 和谐 与 卸载
  6. linux 访客日志ip,shell统计ip访问情况,要求分析访问日志分析。
  7. c++ enum 给定类型_C++11作用域内枚举enum
  8. c语言学习自我评价,学习自我评价4篇
  9. 【java机器学习】支持向量机之拉格朗日乘子法解释
  10. c 获取mysql安装路径_linux查看mysql安装路径
  11. 【elasticsearch】elasticsearch 批量查询之mget
  12. 运放参数的详细解释和分析-part2-如何测量输入偏置电流Ib和输入失调电流Ios
  13. Vue + Spring Boot 项目实战
  14. win7蓝屏_0x0000007e蓝屏代码怎么回事?Win7蓝屏0x0000007e解决方法
  15. 2022.4.10 ShanDong Multi-University Training #1 QLU-team#8 の 赛后总结
  16. floating输入 高阻输入_按键怎么有那么多种接法,有的要电阻有的不用?实在搞糊涂了...
  17. 龙芯3A5000搭建idea开发环境
  18. 4.输入10个字符,统计里面大写英文的个数
  19. Android实现截屏和截长图功能的几种方法
  20. 循环结构的数据流分析方法

热门文章

  1. 一种抑制undershoot/overshoot锐化算法介绍
  2. VC++动态链接库编程之MFC DLL
  3. Uboot启动全过程
  4. topcoder srm 380 div1
  5. ionic 状态栏显示异常 statusBar
  6. zookeeper搭建
  7. Weex Workshop 挑战赛,等你来战!
  8. CommonDialog控件
  9. linux命令--cp
  10. IIS6.0支持PHP设置