Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich rohe Multipart-/Formulardatendaten mit PHP für PUT-Anfragen manuell analysieren?

Wie kann ich rohe Multipart-/Formulardatendaten mit PHP für PUT-Anfragen manuell analysieren?

Barbara Streisand
Barbara StreisandOriginal
2024-10-29 03:03:02438Durchsuche

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

Manuelles Parsen von Multipart-/Formulardaten-Rohdaten mit PHP

Das Parsen von HTTP-Rohdaten, die in Multipart-/Formulardaten formatiert sind, kann eine Herausforderung sein beim Umgang mit PUT-Anfragen in PHP. Im Folgenden finden Sie eine detaillierte Erklärung und eine benutzerdefinierte Parsing-Lösung:

Hintergrund

Standardmäßig analysiert PHP POST-Anfragedaten automatisch, wenn sie korrekt formatiert sind. PUT-Anfragen erfordern jedoch eine manuelle Analyse der Rohdaten. Das Multipart-/Formulardatenformat strukturiert die Daten in durch Grenzen getrennte Blöcke.

Manuelle Parsing-Funktion

Die folgende Funktion analysiert rohe HTTP-Anforderungsdaten manuell:

<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>

Verwendung:

Rufen Sie die Funktion auf und übergeben Sie das Datenarray als Referenz:

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

Das obige ist der detaillierte Inhalt vonWie kann ich rohe Multipart-/Formulardatendaten mit PHP für PUT-Anfragen manuell analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn