Télécharger des fichiers avec file_get_contents()
Bien que cURL offre une méthode simple pour le téléchargement de fichiers, il est possible d'exploiter la fonction file_get_contents() avec le contexte du flux http. Cette approche implique la création d'une requête Content-Type en plusieurs parties avec une limite définie.
Type de contenu et limite en plusieurs parties :
Le type de contenu en plusieurs parties active plusieurs parties dans le HTTP. corps de la demande. Une chaîne de limite, distincte du contenu du corps, sert de délimiteur entre les parties. Voici comment définir une limite :
<code class="php">define('MULTIPART_BOUNDARY', '--------------------------' . microtime(true));</code>
En-tête HTTP et corps du contenu :
L'en-tête Content-Type spécifie la limite du serveur Web :
<code class="php">$header = 'Content-Type: multipart/form-data; boundary=' . MULTIPART_BOUNDARY;</code>
Ensuite, créez le corps du contenu en créant des parties pour chaque fichier et champ :
<code class="php">define('FORM_FIELD', 'uploaded_file'); $filename = "/path/to/uploaded/file.zip"; $file_contents = file_get_contents($filename); $content = "--" . MULTIPART_BOUNDARY . "\r\n" . "Content-Disposition: form-data; name=\"" . FORM_FIELD . "\"; filename=\"" . basename($filename) . "\"\r\n" . "Content-Type: application/zip\r\n\r\n" . $file_contents . "\r\n";</code>
Ajoutez des champs POST supplémentaires si nécessaire :
<code class="php">$content .= "--" . MULTIPART_BOUNDARY . "\r\n" . "Content-Disposition: form-data; name=\"foo\"\r\n\r\n" . "bar\r\n";</code>
Terminez la demande avec une limite de fin :
<code class="php">$content .= "--" . MULTIPART_BOUNDARY . "--\r\n";</code>
Contexte du flux et exécution :
Créez le contexte du flux :
<code class="php">$context = stream_context_create(array( 'http' => array( 'method' => 'POST', 'header' => $header, 'content' => $content, ) ));</code>
Enfin, exécutez le téléchargement :
<code class="php">file_get_contents('http://url/to/upload/handler', false, $context);</code>
Remarque : N'encodez pas les fichiers binaires avant de les envoyer, car HTTP peut gérer les données binaires.
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!