有时候我们获取数据时需要根据Header中的格式来解析,比如上传一个json而不是一个文本。这里用到了 php输入|输出流 的概念。

PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

本文涉及到了了,php://input,详尽内容请参阅官网:点击查看官网 (http://php.net/manual/zh/wrappers.php.php)

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技术大全”微信公众号

axios 获取上传进度_PHP获取HTTP body内容的方法总结相关推荐

  1. el-upload使用自定义上传,获取上传进度和上传成功回调

    项目场景: 在后台管理系统上传图片时,使用自定义的上传方法 问题描述 用element-ui + vue2.0上传多张图片,并使用自定义方法时,无法获取上传进度和上传完成后的图片列表,想要获取上传完成 ...

  2. vue获取上传进度_vue通过input选取apk文件上传,显示进度条

    选择文件 type="file"accept=".ipa,.apk"name="upload"id="file"@cha ...

  3. vue获取上传进度_文件上传与读取实时进度展示-demo(Vue)

    监听进程的方法onprogress 1 )文件读取的progress事件属于FileReader对象. 2 )下载的progress事件属于XMLHttpRequest对象. 3 )上传的progre ...

  4. vue获取上传进度_vue,webuploader实现文件分片上传,并显示上传进度

    1.效果图 2.上传文件时,如果使用普通上传,则需要上传一个文件完成后才能上传下一个文件,如果文件很大时,可能会造成浏览器无响应,如果采用分片上传方式,将一个大文件分割成多块,并发上传,极大地提高大文 ...

  5. vue项目获取上传、下载进度

    在日常项目中 大文件下载或者上传,花费的时间比较长,没有任何提示,用户体验很差. 需要优化,提示文件在下载中,并且显示进度百分比. 1.onUploadProgress 文件上传进度监听 一般 onU ...

  6. js获取上传文件内容

    js 获取上传文件的字节数及内容 <div>上传文件 : <input type="file" name = "file" id = &quo ...

  7. 后台系统上传文件回显上传进度条

    2019独角兽企业重金招聘Python工程师标准>>>   大家有必要看到文末 xhr传统的AJAX传输对象,在做后台系统的时候经常遇到文件上传的情景,以往的xhr已经能够应对文件表 ...

  8. PHP + ajax 实现上传进度条、PHP 上传大视频

    一.PHP + ajax 实现上传进度条 1.1 CSS 样式 根据自身调整哦! .processBar{display: inline-block;width: 0;height: 7px;left ...

  9. Asp无组件上传进度条解决方案

    http://webuc.net/dotey/archive/2004/07/22/1334.aspx 我还是一点一点用一个实例来说明的吧,客户端HTML如下.要浏览上传附件,我们通过<inpu ...

最新文章

  1. 简洁好用的项目管理工具推荐~马起来
  2. python sqlalchemy中文手册-基于Python的SQLAlchemy的操作
  3. YCProgress自定义百分比进度条
  4. Apache CXF实战之六 创建安全的Web Service
  5. Java Socket
  6. GUI菜单——菜单条、菜单、子条目之间关系
  7. 1.13 抽象类和接口的区别
  8. 执行引擎(Query Execution Engine),返回结果
  9. 达梦数据迁移工具的使用
  10. SeismicUnix:wtlib.c[小波变换库]
  11. linux下转移mysql目录
  12. 如何批量设置 Word 文档的只读密码?
  13. windows powershell激活anaconda虚拟环境
  14. c语言射击类打飞机小游戏感悟
  15. 如何把一个字符串的大小写取反?(大写转小写/小写转大写)
  16. 有没有人可以解答一下?
  17. YOLOV5在deepstream6.1.1上应用
  18. 十道必问的软件测试面试题(含答案解析)
  19. vue全局自定义字体,提高项目字体美化
  20. 实用的shell脚本合集

热门文章

  1. gdiplus判断一个点是否在圆弧线上_福建教师招聘考试小学数学面试教案:圆的认识...
  2. servlet3.0异步处理
  3. 曼彻斯特编码_两种编码方式以及两种帧结构
  4. kafka java获取topic_通过编程方式获取Kafka中Topic的Metadata信息
  5. [转载] JAVA数组实现学生成绩统计
  6. [转载] 纯函数和函数柯里化
  7. ruby 集合 分组_在Ruby中打印集合的元素
  8. ruby array_Ruby中带有示例的Array.shuffle方法
  9. Java Formatter locale()方法与示例
  10. Java Calendar toString()方法与示例