使用 PHP 手动解析原始 Multipart/Form-Data 数据
解析以 multipart/form-data 格式的原始 HTTP 请求数据可能具有挑战性在 PHP 中处理 PUT 请求时。下面提供了详细的解释和自定义解析方案:
背景
默认情况下,如果格式正确,PHP 会自动解析 POST 请求数据。然而,PUT 请求需要手动解析原始数据。 Multipart/form-data 格式将数据构造为由边界分隔的块。
手动解析函数
以下函数手动解析原始 HTTP 请求数据:
<code class="php">function parse_raw_http_request(array &$a_data) { // Read incoming data $input = file_get_contents('php://input'); // Extract boundary from content type header preg_match('/boundary=(.*)$/', $_SERVER['CONTENT_TYPE'], $matches); $boundary = $matches[1]; // Split data by boundary $a_blocks = preg_split("/-$boundary/", $input); array_pop($a_blocks); // Loop through data blocks foreach ($a_blocks as $id => $block) { // Skip empty blocks if (empty($block)) continue; // Parse uploaded files if (strpos($block, 'application/octet-stream') !== FALSE) { // Extract name and file contents preg_match('/name=\"([^\"]*)\".*stream[\n|\r]+([^\n\r].*)?$/s', $block, $matches); } // Parse other fields else { // Extract name and value preg_match('/name=\"([^\"]*)\"[\n|\r]+([^\n\r].*)?\r$/s', $block, $matches); } // Add data to array $a_data[$matches[1]] = $matches[2]; } }</code>
用法:
调用函数并通过引用传递数据数组:
<code class="php">$a_data = array(); parse_raw_http_request($a_data); var_dump($a_data);</code>
以上是如何使用 PHP 手动解析 PUT 请求的原始多部分/表单数据数据?的详细内容。更多信息请关注PHP中文网其他相关文章!