首頁 >後端開發 >php教程 >如何在 PHP 中手動解析原始多部分/表單資料資料?

如何在 PHP 中手動解析原始多部分/表單資料資料?

DDD
DDD原創
2024-11-02 18:39:03204瀏覽

How to Manually Parse Raw Multipart/Form-Data Data in PHP?

在PHP 中手動解析原始Multipart/Form-Data 資料

處理來自Multipart/form-data 格式的HTTP PUT 請求的資料時, PHP 不會自動解析原始資料。因此,開發人員在從此類請求中提取資訊時可能會遇到挑戰。

解決方案:

  1. 讀取原始請求資料:

    • 使用🎜>使用file_get_ ('php://input') 讀取原始資料。
  2. 從內容類型中提取邊界標頭:

    • 使用正規表示式從Content-Type 標頭捕獲邊界值($_SERVER['CONTENT_TYPE'])。
  3. 依邊界分割資料:

    • 使用preg_split("- $boundary") 單獨將原始資料分割成單獨將原始資料分割成單獨將原始資料分割成單獨將的塊。
  4. 將區塊分成單獨的欄位:

    • 對於每個區塊:

      • 對於每個區塊:

        對於每個區塊:

        • 上傳檔案:
      • 尋找包含application/octet-stream 的區塊並擷取欄位名稱和檔案名稱。

        • 其他欄位:
      使用正規表示式擷取欄位名稱和值。

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

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