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 相关文章推荐
使用sockets:从新闻组中获取文章(一)
Oct 09 PHP
一个连接两个不同MYSQL数据库的PHP程序
Oct 09 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
Codeigniter框架实现获取分页数据和总条数的方法
Dec 05 PHP
php计算一个文件大小的方法
Mar 30 PHP
php导出中文内容excel文件类实例
Jul 06 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
php实现的二分查找算法示例
Jun 20 PHP
浅谈PHP进程管理
Mar 08 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 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学习笔记之数组篇
2011/06/28 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
jQuery Mobile 触摸事件实例
2016/06/04 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
微信小程序上传图片实例
2018/05/28 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
Python的Urllib库的基本使用教程
2015/04/30 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
yy司仪主持词
2014/03/22 职场文书
《春晓》教学反思
2014/04/20 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书