$_POST

$HTTP_RAW_POST_DATA

php://input

先来讲以上三者的区别:

  $_POST:以关联数组方式组织提交的数据, 并对原数据进行编码处理(urldecode)和编码转换, 无论表单enctype为何值, $_POST都可以成功取到传值, 但是碰到不能识别解析的(比如POST过来的Content-Type为text/xml)就无法解析为$_POST数组, 转而交给$HTTP_RAW_POST_DATA(如何POST xml可以使用curl, fsockopen等设置POST的Content-Type, 接收xml文件可以用以下两种$HTTP_RAW_POST_DATA, 或者file_get_contents('php://input'))

  $HTTP_RAW_POST_DATA:仅在PHP被POST过来不能识别的MIME类型(Content-Type)(比如text/xml或者soap 等等)的时候, 会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA, 并且对于enctype="multipart/form-data"表单数据不可用

  php://input:可通过输入流以文件读取方式取得未经处理的POST原始数据, 并且对于enctype="multipart/form-data"表单数据不可用(除了表单类型单一外, 可以获取任何POST过来的数据), 读取不到$_GET数据, 是因为$_GET数据作为query_path写在http请求头部(header)的PATH字段, 而不是写在http请求的body部分

  总结:

    1.Content-Type仅在取值为application/x-www-data-urlencoded和multipart/form-data两种情况下, PHP才会将http请求数据包中相应的数据填入全局变量$_POST

    2.PHP不能识别的Content-Type类型的时候, 会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DAT

    3.只有Coentent-Type不为multipart/form-data的时候, PHP不会将http请求数据包中的相应数据填入php://input, 否则其它情况都会

    4.只有Content-Type为application/x-www-data-urlencoded时, php://input数据才跟$_POST数据相一致

    5.php://input比$HTTP_RAW_POST_DATA更凑效, 且不需要特殊设置php.ini

    6.PHP会将PATH字段的query_path部分填入全局变量$_GET, 通常情况下, GET方法提交的http请求, body为空

    以上结论摘抄自:http://www.jb51.net/article/31317.htm

讲到php://input再来讲PHP的各种输入/输出流

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

php://stdin, php://stdout和php://stderr

  以上三个允许直接访问PHP进程相应的输入或者输出流(进程模式的PHP), 数据流引用了复制的文件描述符, 所以如果你打开php://stdin并在之后关了它, 仅是关闭了复制品, 真正被引用的STDIN并不受影响

  php://stdin是只读的, php://stdout和php://stderr是只写的

php://input

  可以访问请求的原始数据的只读流(获取请求头的body部分), 打开的数据流只能读取一次, 数据流不支持seek操作

php://output

  是一个只写的数据流, 允许你以print和echo一样的方式写入到输出缓冲区

php://fd

  允许直接访问指定的文件描述符

php://memory和php://temp

   php://memory和php://temp是一个类似文件包装器的数据流, 允许读写临时数据, 两者的唯一区别是php://memory总是把数据储存在内存中, 而php://temp会在内存量达到预定义的限制后(默认是2MB)存入临时文件中, 临时文件位置的决定和sys_get_temp_dir()的方式一致, php://temp的内存限制可通过添加/maxmemory:NN来控制, NN 是以字节为单位、保留在内存的最大数据量, 超过则使用临时文件

PHP-php://(类型)访问各个输入/输出流以及全局变量$HTTP_RAW_POST_DATA讲解相关推荐

  1. C++_IO类型_文件输入输出流_字符串流

    IO类型 iostream: 用于窗口的输入输出 fstream: 用于文件读写 sstream :读写存储在内存中的string对象 注:他们继承于istream与ostream,因此istream ...

  2. 对PHP输入输出流学习和认识

    php:// php:// - 访问各个输入/输出流(I/O streams) PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流.标准输入输出和错误描述符, 内存中.磁盘备份 ...

  3. Java基础(28)数据输入输出流、内存操作流、打印流、随机访问流、序列化与反序列化流、Properties类(集合)

    1. 数据输入输出流 1. 数据输入输出流的概述: (1)以Stream结尾的,一般都是字节流 (2)数据输入流(DataInputStream):数据输入流允许应用程序以与机器无关方式从底层输入流中 ...

  4. Java IO (二),常见的输入/输出流

    字节流和字符流 InputStream和Reader InputStream和Reader两个抽象类是所有输入流的基类,本身并不能创建实例来执行输入,但它们将成为所有输入流的模板.他们的方法是所有输入 ...

  5. Java输入输出流IO

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  6. 1.6 Java字节流的使用:字节输入/输出流、文件输入/输出流、字节数组输入/输出流

    InputStream 是 Java 所有字节输入流类的父类, OutputStream 是 Java 所有字节输出流类的父类, 它们都是一个抽象类,因此继承它们的子类要重新定义父类中的抽象方法. 下 ...

  7. C++学习笔记:(九)输入/输出流

    目录 9.输入/输出流 9.1C++流类库简介 9.2输入/输出流 9.3自定义类型的输入/输出 9.4文件输入/输出 9.输入/输出流 数据的输入.输出是最重要的操作,C++ 的输入.输出有 ios ...

  8. 【Java学习笔记十】输入输出流

    在Java.io包中提供了一系列用于处理输入/输出的流类.从功能上分为两类:输入流和输出流.从六结构上可分为:字节流(以字节为处理单位)和字符流(以字符为处理单位). 字符是由字节组成.在Java中所 ...

  9. [转]Java输入输出流的使用详细介绍

    出处:http://www.jb51.net/article/36138.htm 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进 ...

最新文章

  1. Centos 7下mysql的安装与配置
  2. 【随笔】express中间件系统的基本实现
  3. Spherical Harmonics Lighting的代码实现(基于OpenGL)
  4. 计算机操作员实操高级试题,计算机操作员高级实操(以往考过,可做平时练习素材)答题.doc...
  5. linux发指令给网络设备,Linux学习笔记五(网络命令)
  6. 搭建分布式环境:Dubbo+Zookeeper
  7. php 命名空间通俗易懂_PHP进阶由浅入深掌握面向对象开发
  8. Nexus搭建Maven私有仓库
  9. 背包问题 codevs2210 数字组合
  10. linux充电时熄屏时间,充电时玩手机会损害电池吗
  11. 自学python能找到工作吗-学完python能找到工作么
  12. jquery各历史版本下载地址
  13. Webstorm配置svn【window系统】
  14. 前后端-SpringBoot-JPA的简单写法(配合前端vue)
  15. CCS 8.00 软件中视窗的应用
  16. python实时语音转写_实时语音转写 API 文档
  17. 随手笔记 -- 时间搜索框,默认搜索4天前至今天
  18. U盘分区删除和新建分区
  19. python中sklearn实现决策树及模型评估_Python sklearn决策树算法实践
  20. 海量数据处理方法总结 常见大数据题目汇总

热门文章

  1. 省级刊物发表有什么要求?需注意什么事项?
  2. 《云计算:概念、技术与架构》一1.5 书写惯例
  3. 如何查看单元测试的结果 以及异常处理
  4. 安装TinyOS需要六个步骤
  5. 了解这12个概念,让你的JavaScript水平更上一层楼
  6. Ubuntu安装JDK,搭建java环境
  7. Lync 客户端功能对比之IM功能
  8. SQL2005服务器上安装SQL2008失败
  9. Samba简单应用案例
  10. 英特尔® 硬件加速执行管理器安装指南 — Mac OS X*