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


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

    php://input

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

    
    // 检查请求方法是否为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);
    }
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在上面的示例中,我们首先检查请求方法是否为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函数:

    
    $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;
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    使用file_get_contents函数:

    
    $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;
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    这两种方法都可以发送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数据。


    @漏刻有时

  • 相关阅读:
    按钮测试: 循环遍历 单据行明细 &执行SQL
    数据字典的作用是什么,它有哪些条目?
    @FeignClient configuration参数配置
    米尔MYD-JX8MPQ yocto 编译流程 (记录)
    COMO-ViT论文阅读笔记
    如何在Linux下 自定义/编写 一个守护进程
    工厂设计模式
    JC/T 239-2014 蒸压粉煤灰砖检测
    netty应用实践
    基于java+springboot+mybatis+vue+elementui的旅游景点门票购票网站
  • 原文地址:https://blog.csdn.net/weixin_41290949/article/details/133609712