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 相关文章推荐
兼容性最强的PHP生成缩略图的函数代码(修改版)
Jan 18 PHP
php 5.3.5安装memcache注意事项小结
Apr 12 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
Apr 08 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
[原创]php简单防盗链验证实现方法
Jul 09 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
Nov 12 PHP
浅析PHP数据导出知识点
Feb 17 PHP
用PHP的反射实现委托模式的讲解
Mar 22 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 IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
javawscript 三级菜单的实现原理
2009/07/01 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
在Django的URLconf中使用命名组的方法
2015/07/18 Python
Python爬取京东的商品分类与链接
2016/08/26 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
浅谈HTML5新增和废弃的标签
2019/04/28 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
介绍一下常见的木马种类
2014/11/15 面试题
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
学生会竞选自荐信
2013/10/12 职场文书
旷课检讨书2000字
2014/01/14 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
普通党员个人整改措施
2014/10/27 职场文书