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=\"([^\"]*)\".*stream[\n|\r]+([^\n\r].*)?$/s', $block, $matches); } // Parse other fields else { // Extract name and value preg_match('/name=\"([^\"]*)\"[\n|\r]+([^\n\r].*)?\r$/s', $block, $matches); } // Add data to array $a_data[$matches[1]] = $matches[2]; } }</code>
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>
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!