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中的串行化变量和序列化对象
Sep 05 PHP
学习discuz php 引入文件的方法DISCUZ_ROOT
Jun 21 PHP
一个PHP并发访问实例代码
Sep 06 PHP
PHP字符串的连接的简单实例
Dec 30 PHP
PHP+javascript制作带提示的验证码源码分享
May 28 PHP
PHP的error_reporting错误级别变量对照表
Jul 08 PHP
php+mysql实现无限分类实例详解
Jan 15 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
php中Snoopy类用法实例
Jun 19 PHP
微信支付开发订单查询实例
Jul 12 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 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
程序员编程十条戒律
2009/07/09 PHP
php警告Creating default object from empty value 问题的解决方法
2014/04/02 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
些很实用且必用的小脚本代码
2006/06/26 Javascript
prototype.js的Ajax对象
2006/09/23 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
详解python中docx库的安装过程
2019/11/08 Python
python写一个随机点名软件的实例
2019/11/28 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
python中pow函数用法及功能说明
2020/12/04 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
html5 touch事件实现触屏页面上下滑动(一)
2016/03/10 HTML / CSS
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
美国存储和组织商店:The Container Store
2017/08/16 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
孝敬父母的演讲稿
2014/05/14 职场文书
教育实习指导教师评语
2014/12/31 职场文书
行政撤诉申请书
2015/05/18 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书