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去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
May 17 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
zf框架的Filter过滤器使用示例
Mar 13 PHP
php修改指定文件后缀的方法
Sep 11 PHP
PHP面向对象程序设计类的定义与用法简单示例
Dec 27 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 PHP
PHP中遍历数组的三种常用方法实例分析
Jun 24 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
PHP的类 功能齐全的发送邮件类
2006/10/09 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
php源码的使用方法讲解
2019/09/26 PHP
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
python的多重继承的理解
2017/08/06 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
2020/02/23 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
介绍一下write命令
2012/09/24 面试题
英语专业毕业生自我鉴定
2013/11/09 职场文书
英文自荐信格式
2013/11/28 职场文书
社团招新策划书
2014/02/04 职场文书
保护黄河倡议书
2014/05/16 职场文书
跳蚤市场口号
2014/06/13 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
党委领导班子整改方案
2014/09/30 职场文书
患者身份识别制度
2015/08/06 职场文书