Comment télécharger des fichiers à l'aide de file_get_contents() avec un type de contenu et une limite en plusieurs parties ?

DDD
Libérer: 2024-10-18 12:30:30
original
1050 Les gens l'ont consulté

How to Upload Files Using file_get_contents() with Multipart Content-Type and Boundary?

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

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

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

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

Terminez la demande avec une limite de fin :

<code class="php">$content .= "--" . MULTIPART_BOUNDARY . "--\r\n";</code>
Copier après la connexion

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

Enfin, exécutez le téléchargement :

<code class="php">file_get_contents('http://url/to/upload/handler', false, $context);</code>
Copier après la connexion

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!

source:php
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