Maison > développement back-end > tutoriel php > Comment analyser manuellement les données brutes multiparts/données de formulaire avec PHP pour les requêtes PUT ?

Comment analyser manuellement les données brutes multiparts/données de formulaire avec PHP pour les requêtes PUT ?

Barbara Streisand
Libérer: 2024-10-29 03:03:02
original
538 Les gens l'ont consulté

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

Analyser manuellement les données brutes multipart/form-data avec PHP

L'analyse des données brutes de requête HTTP formatées en multipart/form-data peut être difficile lorsqu'il s'agit de requêtes PUT en PHP. Ce qui suit fournit une explication détaillée et une solution d'analyse personnalisée :

Contexte

Par défaut, PHP analyse automatiquement les données de la requête POST si elles sont correctement formatées. Cependant, les requêtes PUT nécessitent une analyse manuelle des données brutes. Le format de données multiparties/formulaire structure les données en blocs séparés par des limites.

Fonction d'analyse manuelle

La fonction suivante analyse manuellement les données brutes des requêtes 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>
Copier après la connexion

Utilisation :

Appelez la fonction et transmettez le tableau de données par référence :

<code class="php">$a_data = array();
parse_raw_http_request($a_data);
var_dump($a_data);</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal