Pouvez-vous envoyer des chaînes de contenu de fichier directement à l'aide de cURL sans créer de fichiers temporaires ?

Susan Sarandon
Libérer: 2024-10-17 18:32:02
original
1081 Les gens l'ont consulté

Can You Send File Content Strings Directly Using cURL Without Creating Temporary Files?

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal