PHP输入流php://input介绍


在PHP中,`php://input` 是一个特殊的流,它允许你读取原始的POST数据。这意呀着,当你通过POST方法发送数据时,无论数据类型(如`application/x-www-form-urlencoded`、`multipart/form-data` 或 `raw` 数据如JSON、XML等),你都可以通过 `php://input` 来访问这些数据。但是,需要注意的是,一旦你读取了 `php://input` 流,你就不能再通过全局变量(如 `$_POST` 或 `$_FILES`)来访问POST数据了,因为PHP在解析这些全局变量时,会从输入流中读取数据,导致输入流被清空。

这里是一个简单的例子,展示了如何使用 `php://input` 来读取POST的原始数据:


<?php
// 确保是以POST方法接收数据
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 读取原始POST数据
    $rawData = file_get_contents("php://input");
    
    // 处理原始数据(例如,解析JSON)
    $data = json_decode($rawData, true); // 第二个参数为true时,将返回关联数组
    
    // 打印处理后的数据
    print_r($data);
}
?>

在这个例子中,我们首先检查是否是以POST方法接收数据。如果是,我们就使用 `file_get_contents("php://input")` 来读取原始的POST数据。然后,我们可以根据数据的实际类型(在这个例子中是JSON),使用相应的函数(如 `json_decode`)来解析这些数据。

需要注意的是,由于 `php://input` 是原始数据流,因此在使用它时,你应该知道你所期待的数据类型,并相应地处理这些数据。此外,由于它读取的是原始数据,所以如果你同时需要访问全局变量(如 `$_POST` 或 `$_FILES`),你应该在读取 `php://input` 之前先处理这些数据。