ホームページ >バックエンド開発 >PHPチュートリアル >PUTリクエストのためにPHPを使用して生のマルチパート/フォームデータデータを手動で解析する方法は?

PUTリクエストのためにPHPを使用して生のマルチパート/フォームデータデータを手動で解析する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-29 03:03:02525ブラウズ

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

PHP を使用した生の Multipart/Form-Data データの手動解析

multipart/form-data でフォーマットされた生の HTTP リクエスト データの解析は困難な場合がありますPHP で PUT リクエストを処理するとき。以下に、詳細な説明とカスタム解析ソリューションを示します。

Background

デフォルトでは、正しくフォーマットされている場合、PHP は POST リクエスト データを自動的に解析します。ただし、PUT リクエストでは生データを手動で解析する必要があります。マルチパート/フォームデータ形式は、データを境界で区切られたブロックに構造化します。

手動解析関数

次の関数は、生の 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>

以上がPUTリクエストのためにPHPを使用して生のマルチパート/フォームデータデータを手動で解析する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。