php://input
是PHP中的一个特殊的输入流,它允许访问请求的原始数据。它主要用于处理非表单的POST请求,例如当请求的内容类型为application/json
或application/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特性,但它们之间存在一些区别。
- 可用性:
php://input
是PHP 5.3及以上版本中引入的,而$HTTP_RAW_POST_DATA
是PHP 5.4及以上版本中引入的。因此,在PHP 5.3和5.4之间的版本中,你只能使用php://input
来访问原始POST数据。 - 全局变量:
$HTTP_RAW_POST_DATA
是一个超级全局变量,可以在任何地方直接使用。而php://input
是一个输入流,需要通过file_get_contents
函数来读取数据。 - 数据处理:
$HTTP_RAW_POST_DATA
变量中存储的是原始的POST数据,需要根据你的需要进行解析和处理。而php://input
则是一个只读流,你可以通过读取操作来获取原始POST数据,并在读取过程中进行处理。 - 内存占用:
$HTTP_RAW_POST_DATA
变量将完整的POST数据存储在内存中,这可能会导致内存占用问题,特别是当POST数据非常大时。而php://input
则允许你按需读取数据,可以减少内存占用。
总的来说,php://input
和$HTTP_RAW_POST_DATA
都可以用于访问原始POST数据,但php://input
在可用性和内存占用方面更具优势。因此,建议使用php://input
来访问和处理原始POST数据。文章来源:https://www.toymoban.com/news/detail-728148.html
@漏刻有时文章来源地址https://www.toymoban.com/news/detail-728148.html
到了这里,关于php实战案例记录(16)php://input输入流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!