当前位置: 首页 > news >正文

php实战案例记录(16)php://input输入流

php://input是PHP中的一个特殊的输入流,它允许访问请求的原始数据。它主要用于处理非表单的POST请求,例如当请求的内容类型为application/jsonapplication/xml时。使用php://input可以获取到POST请求中的原始数据,无论数据是什么格式。使用它来读取和解析JSON、XML或其他格式的数据,以便在应用程序中使用。

php://input

下面是一个简单的示例,演示如何使用php://input读取JSON格式的数据:

<?php
// 检查请求方法是否为POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {// 获取原始POST数据$rawData = file_get_contents('php://input');// 将原始数据解析为JSON格式$data = json_decode($rawData, true);// 对数据进行处理// ...// 输出响应echo "Received POST data: ";var_dump($data);
}
?>

在上面的示例中,我们首先检查请求方法是否为POST。然后,我们使用file_get_contents('php://input')函数获取原始POST数据,并将其存储在$rawData变量中。接下来,我们使用json_decode函数将原始数据解析为JSON格式,并将结果存储在$data变量中。最后,我们可以根据需要对数据进行处理,并使用var_dump函数输出响应。

需要注意的是,php://input是一个只读流,一旦读取完毕,就无法再次读取。因此,在读取完数据后,需要将其存储到变量中,以便后续处理。

发送POST请求

在PHP中,你可以使用curl函数或file_get_contents函数来发送POST请求到上述文件(例如input_example.php)。以下是使用这两种方法的示例代码:

使用curl函数:

<?php
$url = 'http://example.com/input_example.php';
$data = array('key1' => 'value1', 'key2' => 'value2');$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);
curl_close($ch);echo $response;
?>

使用file_get_contents函数:

<?php
$url = 'http://example.com/input_example.php';
$data = array('key1' => 'value1', 'key2' => 'value2');
$options = array('http' => array('method'  => 'POST','header'  => 'Content-type: application/x-www-form-urlencoded','content' => http_build_query($data),),
);$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;
?>

这两种方法都可以发送POST请求到input_example.php文件,并将数据作为请求主体发送。可以根据自己的喜好和具体需求选择适合的方式。

与$HTTP_RAW_POST_DATA区别

php://input$HTTP_RAW_POST_DATA都是用于访问原始POST数据的PHP特性,但它们之间存在一些区别。

  1. 可用性:php://input是PHP 5.3及以上版本中引入的,而$HTTP_RAW_POST_DATA是PHP 5.4及以上版本中引入的。因此,在PHP 5.3和5.4之间的版本中,你只能使用php://input来访问原始POST数据。
  2. 全局变量:$HTTP_RAW_POST_DATA是一个超级全局变量,可以在任何地方直接使用。而php://input是一个输入流,需要通过file_get_contents函数来读取数据。
  3. 数据处理:$HTTP_RAW_POST_DATA变量中存储的是原始的POST数据,需要根据你的需要进行解析和处理。而php://input则是一个只读流,你可以通过读取操作来获取原始POST数据,并在读取过程中进行处理。
  4. 内存占用:$HTTP_RAW_POST_DATA变量将完整的POST数据存储在内存中,这可能会导致内存占用问题,特别是当POST数据非常大时。而php://input则允许你按需读取数据,可以减少内存占用。

总的来说,php://input$HTTP_RAW_POST_DATA都可以用于访问原始POST数据,但php://input在可用性和内存占用方面更具优势。因此,建议使用php://input来访问和处理原始POST数据。


@漏刻有时

http://www.lryc.cn/news/183918.html

相关文章:

  • cad图纸如何防止盗图(一个的制造设计型企业如何保护设计图纸文件)
  • Windows11 安全中心页面不可用问题(无法打开病毒和威胁防护)解决方案汇总(图文介绍版)
  • 1329: 【C2】【排序】奖学金
  • 解决dockerfile创建镜像时pip install报错的bug
  • 算法题:分发饼干
  • WebSocket编程golang
  • PHP之redis 和 memache面试题
  • java socket实现代理Android App
  • Nacos与Eureka的区别
  • 浅谈Rob Pike的五条编程规范
  • LeetCode 377.组合总和IV 可解决一步爬m个台阶到n阶楼顶问题( 完全背包 + 排列数)
  • C中volatile总结
  • asp.net班级管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
  • 【Pytorch笔记】6.Transforms
  • nodejs+vue临沂特色产品销售平台elementui
  • 机器学习必修课 - 使用管道 Pipeline
  • WEB各类常用测试工具
  • Naive UI 文档地址
  • 在CentOS7系统中安装MySQL5.7
  • R语言通过接口获取网上数据平台的免费数据
  • 【Docker内容大集合】Docker从认识到实践再到底层原理大汇总
  • 算法题:摆动序列
  • 复习 --- QT服务器客户端
  • Godot 官方2D游戏笔记(1):导入动画资源和添加节点
  • leetcode 热题 100
  • Ae 效果:CC Lens
  • 【Redis】基础数据结构-quicklist
  • QT 实现服务器客户端搭建
  • Javascript - 轮播图
  • MATLAB中syms函数使用