Maison > développement back-end > tutoriel php > Comment analyser manuellement les données brutes multiparts/données de formulaire en PHP ?

Comment analyser manuellement les données brutes multiparts/données de formulaire en PHP ?

DDD
Libérer: 2024-11-02 18:39:03
original
292 Les gens l'ont consulté

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

Analyse manuelle des données brutes Multipart/Form-Data en PHP

Lors du traitement des données des requêtes HTTP PUT avec le format multipart/form-data, PHP n'analyse pas automatiquement les données brutes. Par conséquent, les développeurs peuvent rencontrer des difficultés pour extraire des informations de telles requêtes.

Solution :

  1. Lire les données brutes de la requête :

    • Utilisez file_get_contents('php://input') pour lire les données brutes.
  2. Extraire la limite du type de contenu En-tête :

    • Utilisez une expression régulière pour capturer la valeur limite de l'en-tête Content-Type ($_SERVER['CONTENT_TYPE']).
  3. Diviser les données par limite :

    • Divisez les données brutes en blocs individuels à l'aide de preg_split("- $boundary").
  4. Séparez les blocs en champs individuels :

    • Pour chaque bloc :

      • Téléchargé Fichiers :

        • Recherchez les blocs contenant application/octet-stream et extrayez le nom du champ et le nom du fichier.
      • Autre Champs :

        • Extraire le nom et la valeur du champ à l'aide d'une expression régulière.

示例 Code :

<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>
Copier après la connexion

Utilisation :

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

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal