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抓即时股票信息
Oct 09 PHP
php 动态多文件上传
Jan 18 PHP
Admin generator, filters and I18n
Oct 06 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
thinkPHP查询方式小结
Jan 09 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
Laravel学习教程之model validation的使用示例
Oct 23 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 PHP
Memcached介绍及php-memcache扩展安装
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 HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
探讨:如何编写PHP扩展
2013/06/13 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
javascript时间差插件分享
2016/07/18 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
2020/11/04 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
python错误处理详解
2014/09/28 Python
Python文件读取的3种方法及路径转义
2015/06/21 Python
python实现获取Ip归属地等信息
2016/08/27 Python
python实现飞机大战
2018/09/11 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
模范家庭事迹材料
2014/02/10 职场文书
2014全国两会心得体会
2014/03/17 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
员工福利申请报告
2015/05/15 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书