PHP中file_get_contents的使用方法
$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的使用方法相关推荐
- php中file_get_contents如何读取大容量文件
php中file_get_contents如何读取大容量文件 一.总结 一句话总结:使用file_get_contents()进行分段读取,file_get_contents()函数可以分段读取 1. ...
- php去除每行的重复文本,php删除文本文件中重复行的方法
本文实例讲述了php删除文本文件中重复行的方法.分享给大家供大家参考.具体分析如下: 这个php函数用来删除文件中的重复行,还可以指定是否忽略大小写,和指定换行符 ?12345678910111213 ...
- php显示网络图片,php中显示图片的方法
php中显示图片的方法 发布时间:2020-08-25 14:08:07 来源:亿速云 阅读:80 作者:小新 这篇文章给大家分享的是有关php中显示图片的方法的内容.小编觉得挺实用的,因此分享给大家 ...
- 爬取html数据中文乱码,解决PHP中file_get_contents抓取网页中文乱码问题
根据网上有朋友介绍说原因可能是服务器开了GZIP压缩. 下面是用firebug查看我的博客的头信息,Gzip是开了的. 请求头信息原始头信息 代码如下 复制代码 Accept text/html,ap ...
- stream map方法_Java Stream中map和flatMap方法
最近看到一篇讲stream语法的文章,学习Java中map()和flatMap()方法之间的区别. 虽然看起来这两种方法都做同样的事情,都是做的映射操作,但实际上差之毫厘谬以千里. 通过演示Demo中 ...
- java中json重复数据结构_JS实现去除数组中重复json的方法示例
本文实例讲述了JS实现去除数组中重复json的方法.分享给大家供大家参考,具体如下: var array = [{"name":"123"},{"na ...
- 继承实现的原理、子类中调用父类的方法、封装
一.继承实现的原来 1.继承顺序 Python的类可以继承多个类.继承多个类的时候,其属性的寻找的方法有两种,分别是深度优先和广度优先. 如下的结构,新式类和经典类的属性查找顺序都一致.顺序为D--- ...
- 浅谈在ASP.NET中数据有效性校验的方法
作者:未知 作为一名程序员,一定要对自己编写的程序的健壮性负责,因此数据的校验无论在商业逻辑还是系统实现都是必不可少的部分. 我这里总结了一种自认为比较不错的asp.net(C#)的数据校验方法,如大 ...
- JavaScript文件中调用AngularJS内部方法或改变$scope变量
需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过controll ...
最新文章
- mysql select语句详解_mysql学习笔记之完整的select语句用法实例详解
- 2021年春季学期-信号与系统-第二次作业参考答案-第九小题
- 由华为提供现网商用平台的IPTV业务亮相深圳文博会
- Scrum联盟发布《2016年度Scrum状态调查报告》
- Autocad下载 安装 和谐 与 卸载
- linux 访客日志ip,shell统计ip访问情况,要求分析访问日志分析。
- c++ enum 给定类型_C++11作用域内枚举enum
- c语言学习自我评价,学习自我评价4篇
- 【java机器学习】支持向量机之拉格朗日乘子法解释
- c 获取mysql安装路径_linux查看mysql安装路径
- 【elasticsearch】elasticsearch 批量查询之mget
- 运放参数的详细解释和分析-part2-如何测量输入偏置电流Ib和输入失调电流Ios
- Vue + Spring Boot 项目实战
- win7蓝屏_0x0000007e蓝屏代码怎么回事?Win7蓝屏0x0000007e解决方法
- 2022.4.10 ShanDong Multi-University Training #1 QLU-team#8 の 赛后总结
- floating输入 高阻输入_按键怎么有那么多种接法,有的要电阻有的不用?实在搞糊涂了...
- 龙芯3A5000搭建idea开发环境
- 4.输入10个字符,统计里面大写英文的个数
- Android实现截屏和截长图功能的几种方法
- 循环结构的数据流分析方法