在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中文網其他相關文章!