在 PHP 中手动解析原始 Multipart/Form-Data 数据
处理来自 Multipart/form-data 格式的 HTTP PUT 请求的数据时, PHP 不会自动解析原始数据。因此,开发人员在从此类请求中提取信息时可能会遇到挑战。
解决方案:
读取原始请求数据:
从内容类型标头中提取边界:
按边界分割数据:
将块分成单独的字段:
对于每个块:
上传的文件:
其他字段:
示例代码:
<code class="php">function parse_raw_http_request(array &$a_data) { $input = file_get_contents('php://input'); preg_match('/boundary=(.*)$/', $_SERVER['CONTENT_TYPE'], $matches); $boundary = $matches[1]; $a_blocks = preg_split("/-+$boundary/", $input); array_pop($a_blocks); foreach ($a_blocks as $id => $block) { if (empty($block)) continue; if (strpos($block, 'application/octet-stream') !== FALSE) { preg_match('/name=\"([^\"]*)\".*stream[\n|\r]+([^\n\r].*)?$/s', $block, $matches); } else { preg_match('/name=\"([^\"]*)\"[\n|\r]+([^\n\r].*)?\r$/s', $block, $matches); } $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 中手动解析原始多部分/表单数据数据?的详细内容。更多信息请关注PHP中文网其他相关文章!