Upload d'un fichier par curl
Fermé
kedubon
-
Modifié par kedubon le 23/10/2010 à 14:48
avion-f16 Messages postés 19252 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 10 février 2025 - 17 août 2011 à 13:11
avion-f16 Messages postés 19252 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 10 février 2025 - 17 août 2011 à 13:11
A voir également:
- Upload d'un fichier par curl
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Ouvrir un fichier .bin - Guide
- Comment ouvrir un fichier docx ? - Guide
11 réponses
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
Modifié par avion-f16 le 17/08/2011 à 14:02
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 ».
La pensée mène le monde.
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.
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
23 oct. 2010 à 23:07
23 oct. 2010 à 23:07
Salut.
À part le 'relapath' à la place de 'realpath', je ne vois pas d'erreur.
À part le 'relapath' à la place de 'realpath', je ne vois pas d'erreur.
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
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
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
24 oct. 2010 à 18:45
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 :
Sinon, le résultat est '@realpath(image.png)' et pas '@C:\...\image.png'
Voilà la ligne corrigée :
'userfile' => '@'.realpath('image.png'),
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
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...
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
24 oct. 2010 à 20:06
24 oct. 2010 à 20:06
Quel est le résultat de la fonction realpath() ?
Essaye en encodant le chemin avec urlencode().
Essaye en encodant le chemin avec urlencode().
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
* 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
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
24 oct. 2010 à 22:43
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.
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.
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
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
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
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
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