PHPer 高手之路
  • Introduction
  • First Chapter
  • 基础
    • 数据类型和常量
    • 字符串
      • 字符编码
      • 字符编码相关编程
    • 引用变量
    • 运算符与错误控制符@
    • 流程控制与条件判断
      • foreach遍历中的引用
    • 函数
    • 文件及目录处理
  • PHP 数组
    • 基础
    • PHP数组操作
    • 输入流 php://input
    • PHP数组的内部实现
    • PHP数组和数据结构
    • 示例技巧
  • PHP文件编程
    • 文件系统
    • 基础
    • 实例技巧
    • PHP中XML处理
    • PHP中JSON处理
    • PHP中CSV处理
    • 大文件上传
  • 正则表达式
    • 基础
    • 正则的引擎
    • 表达式的优化
    • PHP中正则的使用
  • PHP 编码技巧
    • PHP编码习惯
    • PHP语法糖
    • PHP代码优化
    • PHP重点新特性
    • PHP编码规范
  • PHP选项和运行原理
    • PHP SAPI
    • PHP运行模式及安装方式
    • 附录:进程和线程的Q解
    • Apache下的MPM模式
    • Apache 与 Nginx
    • PHP的运行机制及原理
    • PHP垃圾回收机制
    • PHP配置选项
  • PHP安全
    • 跨站脚本攻击(XSS )
    • 跨站请求伪造(CRSF)
  • PHP 高级特性
    • 异常处理(Exceptions)
    • 代码复用(Trait)
    • 预定义接口(Predefined Interfaces)
    • 魔术方法(Magic Methods)
    • 回调函数、匿名函数&闭包
    • 命名空间(Namespaces)
    • 自动加载(Autoload)
    • 反射(Reflection)
    • 魔术常量(Magic constants)
    • 综合实例
  • 附录:关键词
  • 附录:资料
  • 代码的版本控制
    • SVN
    • Git
      • 疑难杂症
  • Linux
    • Linux原理与基础
    • 常见命令
    • Shell 编程
    • awk 与 sed
    • 命令笔记
  • HTTP 协议
    • 请求方法与返回状态码
    • Cookie、Session 的原理
  • MySQL
    • MySQL表存储引擎
  • 标准PHP库(SPL)
    • 数据结构
      • SplPriorityQueue - 优先队列
      • SplQueue - 队列
      • SplStack - 栈的功能
    • 接口
      • Countable - count统计接口
  • 附录:ElasticSearch
  • PHP数据结构
  • 附录:Rabbitmq
  • 附录:guzzle
  • JavaScript
    • 附录:资料
  • 疑难杂症
Powered by GitBook
On this page
  • $_POST 与 php://input
  • $HTTP_RAW_POST_DATA 与 php://input

Was this helpful?

  1. PHP 数组

输入流 php://input

PreviousPHP数组操作NextPHP数组的内部实现

Last updated 6 years ago

Was this helpful?

$_POST 与 php://input

  1. 仅在取值为application/x-www-data-urlencoded和multipart/form-data时(文件上传时),php会将http请求body相应数据会填入到数组$_POST,填入到$_POST数组中的数据是进行urldecode()解析的结果。

  2. 只要Content-Type不为multipart/form-data, php://input会填入post数据。

  3. 仅当Content-Type为application/x-www-form-urlencoded且提交方法是POST方法时,$_POST数据与php://input数据才是一致的。

$HTTP_RAW_POST_DATA 与 php://input

php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小。

$HTTP_RAW_POST_DATA(This feature has been DEPRECATED as of PHP 5.6.0. 被废弃了,查看)

更多php://input,查看

解析

var_dump($_POST);
echo file_get_contents("php://input");

情况1: 文件上传时,form的enctype="multipart/form-data",此时,数据php://input获取不到数据

<form enctype="multipart/form-data" method="post">
<input type="text" name="name" />
<input type="file" name="csv_file" />
<button type="submit" name="submit" value="Submit">Submit</button>
</form>
<?php
var_dump($_POST);
echo "<br>";
var_dump(file_get_contents("php://input"));

测试结果 只有$_POST获取了数据

array (size=2)

'name' => string 'test' (length=4)

'submit' => string 'Submit' (length=6)

情况2: 非文件上传时的form表单

<form method="post">
name:<input type="text" name="name" /><br>
age:<input type="text" name="age" />
<button type="submit" name="submit" value="Submit">Submit</button>
</form>
<?php
echo '$_POST result:<br>';
var_dump($_POST);
echo "<br>";
echo 'php://input result:<br>';
var_dump(file_get_contents("php://input"));

测试结果:两者都会获取数据

$_POST result:
array (size=3)
  'name' => string 'revin' (length=5)
  'age' => string '28' (length=2)
  'submit' => string 'Submit' (length=6)

php://input result:
string 'name=revin&age=28&submit=Submit' (length=31)

情况3 :postman 直接发送json body 体, 也就是api的场景

测试结果:只有php://input获取到了数据

官方文档
官方文档