PHP获取HTTP body内容的方法


Posted in PHP onDecember 31, 2018

有时候我们获取数据时需要根据Header中的格式来解析,比如上传一个json而不是一个文本。这里用到了 php输入|输出流 的概念。

PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

本文涉及到了了,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 是无效的。

模拟代码

// server.php
switch($_SERVER['CONTENT_TYPE']){
 case 'application/json':
 // 这里通过输入端来获取数据
 $body = file_get_contents('php://input');
 echo '这是一个json:', $body;
 break;
 // ...
}
// client_web.php, 注意这里使用了 axios
// ...
service = axios.create({
 baseURL: 'mydomain',
 validateStatus:function(status){
 if(500 >= status) alert('server fails');
 }
});

// 发一个请求
service.post(url, {
 // ...
 headers: {'Content-Type':'application/json'},
 data:'{"code":100}'
 // ...
});

// 全局设置也没问题
service.interceptors.request.use(function(config){
 // 这里设置请求头
 config.headers['Content-Type'] = 'application/json';
 return config;
}, function(err){});

引申阅读

以下为官方文档小抄

PHP 输入|输出流分为: php://stdin, php://stdout 和 php://stderr

php://stdin、php://stdout 和 php://stderr 允许直接访问 PHP 进程相应的输入或者输出流。 数据流引用了复制的文件描述符,所以如果你打开 php://stdin 并在之后关了它, 仅是关闭了复制品,真正被引用的 STDIN 并不受影响。 注意 PHP 在这方面的行为有很多 BUG 直到 PHP 5.2.1。 推荐你简单使用常量 STDIN、 STDOUT 和 STDERR 来代替手工打开这些封装器。

其中 php://stdin 是只读的, php://stdout 和 php://stderr 是只写的。

php://output

php://output 是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区。

php://fd

php://fd 允许直接访问指定的文件描述符。 例如 php://fd/3 引用了文件描述符 3。

php://memory 和 php://temp

php://memory 和 php://temp 是一个类似文件 包装器的数据流,允许读写临时数据。 两者的唯一区别是 php://memory 总是把数据储存在内存中, 而 php://temp 会在内存量达到预定义的限制后(默认是 2MB)存入临时文件中。 临时文件位置的决定和 sys_get_temp_dir() 的方式一致。

php://temp 的内存限制可通过添加 /maxmemory:NN 来控制,NN 是以字节为单位、保留在内存的最大数据量,超过则使用临时文件。

php://filter

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。

php://filter 目标使用以下的参数作为它路径的一部分。 复合过滤链能够在一个路径上指定。详细使用这些参数可以参考具体范例。

以上这篇PHP获取HTTP body内容的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
163的邮件用phpmailer发送(实例详解)
Jun 24 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
php中mt_rand()随机数函数用法
Nov 24 PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
PHP文件上传处理案例分析
Oct 15 PHP
PHP实现活动人选抽奖功能
Apr 19 PHP
php中Ioc(控制反转)和Di(依赖注入)
May 07 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
php两点地理坐标距离的计算方法
Dec 29 #PHP
php如何计算两坐标点之间的距离
Dec 29 #PHP
PHP命名空间简单用法示例
Dec 28 #PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 #PHP
PHP面向对象程序设计继承用法简单示例
Dec 28 #PHP
PHP抽象类基本用法示例
Dec 28 #PHP
php PDO属性设置与操作方法分析
Dec 27 #PHP
You might like
十天学会php之第九天
2006/10/09 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
详解React 在服务端渲染的实现
2017/11/16 Javascript
angularJS开发注意事项
2018/05/26 Javascript
js的对象与函数详解
2019/01/21 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
vue项目中js-cookie的使用存储token操作
2020/11/13 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
Python类定义和类继承详解
2015/05/08 Python
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
Python解惑之True和False详解
2017/04/24 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
Django 过滤器汇总及自定义过滤器使用详解
2019/07/19 Python
python线程里哪种模块比较适合
2020/08/02 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
adidas美国官网:adidas US
2016/09/21 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
竟聘演讲稿范文
2013/12/31 职场文书
学习新党章思想汇报
2014/01/09 职场文书
庆元旦活动总结
2014/07/09 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
简单介绍Python的第三方库yaml
2021/06/18 Python