ホームページ  >  記事  >  バックエンド開発  >  PHP で PUT リクエストの「multipart/form-data」を手動で解析するにはどうすればよいですか?

PHP で PUT リクエストの「multipart/form-data」を手動で解析するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-28 06:47:02911ブラウズ

How Can I Parse Manually `multipart/form-data` in PHP for PUT Requests?

PUT リクエストのマルチパート/フォームデータを PHP で手動で解析する

PHP で生のマルチパート/フォームデータを解析するのは困難な場合があります。特に PUT リクエストの場合。 PHP の組み込みパーサーは POST リクエストを自動的に処理しますが、PUT リクエストは処理しません。

Background:

Multipart/form-data は、フィールドを含む複数のデータ部分をカプセル化するために使用される形式です。およびファイルを 1 つのリクエスト本文内に含めます。データは境界文字列で区切られており、各部分にはコンテンツ タイプと名前があります。

手動解析:

multipart/form-data を手動で解析するには、次のことができます。次の手順を使用します:

  1. 生のリクエスト データを取得します: $input = file_get_contents('php://input');
  2. 境界を抽出します: preg_match('/boundary= (.*)$/', $_SERVER['CONTENT_TYPE'], $matches);
  3. 境界に基づいてデータをブロックに分割します: $a_blocks = preg_split("/- $boundary/", $ input);
  4. 各ブロックの場合:

    • ファイル フィールドの場合 (「application/octet-stream」を含む):

      • フィールド名とファイルの内容を抽出します: preg_match('/name="([^"]*)".*stream[n|r] ([^nr].*)?$/s', $ block, $matches);
    • 他のフィールドの場合:

      • フィールド名と値を抽出します: preg_match('/name="( [^"]*)"[n|r] ([^nr].*)?r$/s', $block, $matches);
  5. フィールドと値をデータ構造に割り当てます: $a_data[$matches[1]] = $matches[2];

使用例:

<code class="php">$a_data = array();
parse_raw_http_request($a_data);
var_dump($a_data);</code>

以上がPHP で PUT リクエストの「multipart/form-data」を手動で解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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