2010-08-08 9 views
17

Il est trivial d'obtenir une image du serveur mais je pense à quelque chose de différent. C'est une question folle mais ... Est-il possible d'envoyer un fichier (image) à un serveur sans utiliser le téléchargement de formulaire ou la connexion ftp? Je veux envoyer une demande à par exemple. http://www.example.com/file.php avec un contenu binaire. Je pense que je dois définir l'image de l'en-tête Content-type/jpeg mais comment ajouter du contenu à ma demande?CURL PHP envoyer image

Répondre

10

voir http://docs.php.net/function.curl-setopt:

CURLOPT_POSTFIELDS Les données complètes pour publier dans une opération de HTTP "POST". Pour publier un fichier, préfixez un nom de fichier avec @ et utilisez le chemin d'accès complet. Cela peut être passé comme une chaîne urlencodée comme 'para1 = val1 & para2 = val2 & ...' ou comme un tableau avec le nom du champ comme clé et les données de champ comme valeur. Si la valeur est un tableau, l'en-tête Content-Type sera défini sur multipart/form-data.
16

il y a plusieurs façons d'utiliser curl pour télécharger des fichiers d'images, par exemple:

$ch = curl_init(); 
$data = array('name' => 'Foo', 'file' => '@/path/to/image.jpeg'); 
curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php'); 
curl_setopt($ch, CURLOPT_POST, 1); 
//CURLOPT_SAFE_UPLOAD defaulted to true in 5.6.0 
//So next line is required as of php >= 5.6.0 
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
curl_exec($ch); 

vous pouvez vérifier les exemples à: http://au.php.net/manual/en/function.curl-setopt.php

+0

C'est ce que je cherchais. Merci! –

+0

Merci un exemple si complet et si concis! –

+3

CURLOPT_SAFE_UPLOAD par défaut à true dans 5.6.0 ... donc vous devrez ajouter curl_setopt ($ ch, CURLOPT_SAFE_UPLOAD, false); avant de définir CURLOPT_POSTFIELDS. – muglio

0

VolkerK est tout à fait raison, mais mon expérience suggère que l'envoi d'un fichier " L'opérateur @ "ne fonctionnera qu'avec les tableaux.

$post['file'] = "@FILE_Path" 

vous pouvez maintenant envoyer le fichier à l'aide CURLOPT_POSTFIELDS

+0

Cette méthode n'est plus recommandée. Voir: http://php.net/manual/fr/class.curlfile.php – Erik