Upload d'un fichier par curl

Fermé
kedubon - Modifié par kedubon le 23/10/2010 à 14:48
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 17 août 2011 à 13:11
Bonjour,

Est ce qu'un éminent warrior du PHP a une réponde à mon problème ?

Voilà, je veux envoyer automatiquement par curl un fichier vers un serveur en simulant un "form" qui se présente comme ça (pour résumer) :

<FORM id="form" ENCTYPE="multipart/form-data" ACTION="/process.php" METHOD=POST>
<input id="userfile" NAME="userfile" TYPE="file"> <input name="upload" type="submit" value="Send File" >

mon code pour curl est le suivant :

$post = array(
'userfile' => '@'.'relapath(image.png)' ,
'upload' => "Send File"
);

// On effectue la requête avec cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://www.monsite.com/process.php');
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
$contenu_page = curl_exec($ch);
echo $contenu_page."<br />\n" ;
curl_close($ch);

Le souci est que rien ne se passe ==> le fichier n'est pas "uploader"

Vous voyez une explication ?
A voir également:

11 réponses

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
Modifié par avion-f16 le 17/08/2011 à 14:02
Salut,

Je pense que le script oublie de modifier l'entête HTTP « Content-type » en indiquant « multipart/form-data ».

Il est également possible d'héberger plusieurs sites sur un même serveur.
Il faut donc indiquer au serveur quel hôte (domaine) nous utilisons afin de le joindre grâce à l'entête « Host ».

$postdata = array(
    'userfile' => '@'.realpath('image.png'),
);

$httpheaders = array(
    'Content-type' => 'multipart/form-data',
    'Host' => 'www.example.com',
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/upload.php');
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpheaders);

$contenu_page = curl_exec($ch);
curl_close($ch);

echo $contenu_page."<br />\n" ;

La pensée mène le monde.
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
23 oct. 2010 à 23:07
Salut.
À part le 'relapath' à la place de 'realpath', je ne vois pas d'erreur.
0
Le relapath est bien realpath dans mon code.
Merci, c'est une faute frappe en faisant le billet.

Mais ça ne marche pas pour autant :-(

J'ai encore passé du temps cet après midi sur le sujet, mais je n'ai toujours
pas trouvé.

Merci quand même pour ton attention
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
24 oct. 2010 à 18:45
Il ne faut pas mettre de guillemets autour de la fonction realpath().
Sinon, le résultat est '@realpath(image.png)' et pas '@C:\...\image.png'

Voilà la ligne corrigée :
'userfile' => '@'.realpath('image.png'),
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci je vais essayer ça

Je te tiens informé du résultat

@+
0
Bon, ben j'ai essayé et le fichier ne s'uploade toujours pas.

En fait le site sur lequel je veux uploader est newocr.com
pour me traduire une image de type PNG
Et je dois dire que :
- en mettant en dur le chemin pour l'image c'est KO
- en lisant le fichier dans une variable que je transmet c'est KO aussi

Je suis un sec sur cette affaire.

D'habitude c'est moins dur les envoi de paramètres :-))

Je continue les fouilles...
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
24 oct. 2010 à 20:06
Quel est le résultat de la fonction realpath() ?
Essaye en encodant le chemin avec urlencode().
0
Pour résumer :

* Le realpath('image') me retourne rien

* Donc j'ai mis :
'userfile' => '@'.'D:\images\image.png' -- pas mieux
puis
'userfile' => '@'.urlencode('D:\images\image.png') -- pas mieux
puis
'userfile' => urlencode('@D:\images\image.png') -- pas mieux non plus

Je ne sais plus trop quoi faire...

En tous les cas merci pour tes idées, ça me fait tester plein de trucs
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 500
24 oct. 2010 à 22:43
Est-ce que ton fichier PHP est bien dans D:\images\ ?
Si non, alors on sait pourquoi realpath() ne retourne rien : le chemin est mauvais
Si oui, alors je n'ai aucune idéeé concernant ce problème

Essaye avec des slashes ( / ) au lieu des backslashes ( \ ).

Sinon c'est peut-être un problème de taille de fichier (pas pour l'expéditeur, mais pour le récepteur ; Cf. l'option max_upload_filesize du php.ini chez le récepteur). Par défaut, la limite est de 2mo.
0
Oui mon fichier est bien dans ce répertoire (D:\images\)

Et sur les conseils d'un connaisseur du javascript, j'ai aussi tenté de
remplacer les "\" par des "/" mais sans succès non plus.

Quant à mon fichier il fait 2743 octets exactement, donc je suis loin
de la taille max - dont je m'étais inquiété d'ailleurs.
(c'est une petite image PNG qui contient une date).

J'ai analyser les requêtes avec Firebug et ce qu'il se passe lorsque je suis
sur le site en question. Après le POST il retourne le lien du résultat dans le header de la réponse, et va la rechercher ensuite. C'est un peu bizarre
comme démarche.
Mais dans le POST il y a bien le contenu du fichier PNG.
Ce que je n'arrive pas à faire ==> et il faudrait que je commence par là :-).

D'où ma recherche. Je suis allé voir sur des sites US et CAN mais je ne trouve
pas de réponse si ce n'est différentes astuces du type :
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
mais qui restent inefficaces chez moi.

Bon, je remettrai ça demain.
Merci beaucoup en attendant pour ton aide.

Bonne fin de soirée
0
DoulyCreations Messages postés 187 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 23 mars 2015 19
17 août 2011 à 08:46
Bonjour,

je sais que le billet date un peu mais le résultat m'intéresse toujours.
Si quelqu'un a la réponse au problème ça m'intéresse
0