Données de formulaire en plusieurs parties : envoi de chaînes de fichiers en PHP avec cURL
Dans de nombreux scénarios, les développeurs peuvent être confrontés au besoin de soumettre à la fois des données de formulaire et fichiers à l’aide de requêtes HTTP POST. Lorsqu'il s'agit de fichiers stockés sur le système de fichiers, le processus est simple : préfixer le chemin du fichier avec "@" dans CURLOPT_POSTFIELDS permet à cURL de gérer les téléchargements de fichiers.
Cependant, la question se pose : est-il possible de contourner le processus de création de fichier et envoyer directement le contenu du fichier sous forme de chaîne à l'aide de cURL ?
La réponse est oui, comme le démontre la solution ci-dessous. En construisant manuellement le corps des données du formulaire et en définissant les en-têtes appropriés, nous pouvons simuler le comportement de soumission de formulaire d'un navigateur Web :
<code class="php">// Form field separator $delimiter = '-------------' . uniqid(); // File upload fields: name => array(type => 'mime/type', content => 'raw data') $fileFields = array( 'file1' => array( 'type' => 'text/plain', 'content' => '...your raw file content goes here...' ), /* ... */ ); // Non-file upload fields: name => value $postFields = array( 'otherformfield' => 'content of otherformfield is this text', /* ... */ ); $data = ''; // Populate non-file fields first foreach ($postFields as $name => $content) { $data .= "--" . $delimiter . "\r\n"; $data .= 'Content-Disposition: form-data; name="' . $name . '"'; $data .= "\r\n\r\n"; } // Populate file fields foreach ($fileFields as $name => $file) { $data .= "--" . $delimiter . "\r\n"; $data .= 'Content-Disposition: form-data; name="' . $name . '";' . ' filename="' . $name . '"' . "\r\n"; $data .= 'Content-Type: ' . $file['type'] . "\r\n"; $data .= "\r\n"; $data .= $file['content'] . "\r\n"; } // Last delimiter $data .= "--" . $delimiter . "--\r\n"; $handle = curl_init($url); curl_setopt($handle, CURLOPT_POST, true); curl_setopt($handle, CURLOPT_HTTPHEADER , array( 'Content-Type: multipart/form-data; boundary=' . $delimiter, 'Content-Length: ' . strlen($data))); curl_setopt($handle, CURLOPT_POSTFIELDS, $data); curl_exec($handle);</code>
En suivant ces étapes, nous pouvons construire des données de formulaire en plusieurs parties avec des chaînes de contenu de fichier et soumettre en utilisant cURL, éliminant ainsi le besoin de création de fichiers temporaires. Cette approche offre aux développeurs un plus grand contrôle et une plus grande flexibilité dans la gestion des téléchargements de fichiers au sein de leurs applications PHP.
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!