在 PHP 中手动解析 PUT 请求的原始多部分/表单数据数据
处理多部分/表单数据请求时,尤其是在在 HTTP PUT 操作的上下文中,PHP 的内置解析可能不会像处理 POST 请求那样自动处理原始数据。为了解决这个问题,需要手动解析。
检索原始数据
首先,使用 file_get_contents('php://input' 检索原始 HTTP 请求正文).
解析 Content-Type 标头
使用正则表达式从 Content-Type 标头中提取多部分边界:
<code class="php">preg_match('/boundary=(.*)$/', $_SERVER['CONTENT_TYPE'], $matches); $boundary = $matches[1];</code>
分割数据
将原始数据分成由边界分隔的各个块:
<code class="php">$a_blocks = preg_split("/-+$boundary/", $input); array_pop($a_blocks);</code>
迭代块
循环遍历每个块并解析其内容:
<code class="php">foreach ($a_blocks as $id => $block) { // Check if the block contains uploaded files if (strpos($block, 'application/octet-stream') !== FALSE) { // Extract file metadata using regex preg_match('/name=\"([^\"]*)\".*stream[\n|\r]+([^\n\r].*)?$/s', $block, $matches); } // Parse other form fields else { // Extract form field name and value using regex preg_match('/name=\"([^\"]*)\"[\n|\r]+([^\n\r].*)?\r$/s', $block, $matches); } $a_data[$matches[1]] = $matches[2]; }</code>
现在可以从 $a_data 数组访问解析的数据。这种自定义解析方法允许您在 PHP 中处理原始 multipart/form-data 数据,这对于涉及 PUT 请求的场景特别有用。
以上是如何在 PHP 中手动解析 PUT 请求的多部分/表单数据数据?的详细内容。更多信息请关注PHP中文网其他相关文章!