Maison  >  Article  >  développement back-end  >  Pouvez-vous envoyer des chaînes de contenu de fichier directement à l’aide de cURL sans créer de fichiers temporaires ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-10-17 18:32:02983parcourir

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>

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!

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