Maison  >  Article  >  développement back-end  >  Comment télécharger des fichiers à l'aide de file_get_contents() avec un type de contenu et une limite en plusieurs parties ?

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

DDD
DDDoriginal
2024-10-18 12:30:30970parcourir

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>

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!

Déclaration:
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