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 相关文章推荐
几种显示数据的方法的比较
Oct 09 PHP
php mssql 时间格式问题
Jan 13 PHP
php中计算时间差的几种方法
Dec 31 PHP
php源代码安装常见错误与解决办法分享
May 28 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
php实现指定字符串中查找子字符串的方法
Mar 17 PHP
php验证邮箱和ip地址最简单方法汇总
Oct 30 PHP
详解PHP执行定时任务的实现思路
Dec 21 PHP
功能强大的PHP POST提交数据类
Jul 15 PHP
PHP截取发动短信内容的方法
Jul 04 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
PHP新手指南
Apr 01 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中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
PDO::rollBack讲解
2019/01/29 PHP
javascript Select标记中options操作方法集合
2008/10/22 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
AngularJS基础 ng-keydown 指令简单示例
2016/08/02 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
js实现微信聊天界面
2020/08/09 Javascript
Python中优化NumPy包使用性能的教程
2015/04/23 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
大学本科毕业生求职信范文
2013/12/18 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
python实现批量移动文件
2021/04/05 Python
PHP中多字节字符串操作实例详解
2021/08/23 PHP
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS
Python开发五子棋小游戏
2022/04/28 Python