首頁  >  文章  >  後端開發  >  如何使用 PHP 手動解析 PUT 請求的原始多部分/表單資料資料?

如何使用 PHP 手動解析 PUT 請求的原始多部分/表單資料資料?

Barbara Streisand
Barbara Streisand原創
2024-10-29 03:03:02438瀏覽

How to Manually Parse Raw Multipart/Form-Data Data with PHP for PUT Requests?

使用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=\&quot;([^\&quot;]*)\&quot;.*stream[\n|\r]+([^\n\r].*)?$/s', $block, $matches);
    }
    // Parse other fields
    else
    {
      // Extract name and value
      preg_match('/name=\&quot;([^\&quot;]*)\&quot;[\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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn