Hello!
Je voudrais écrire un script PHP qui permette d'envoyer un fichier sur un serveur par méthode POST (manuellement, on utiliserait un input type="file" en HTML):
En gros, j'envoie une requête HTTP et je récupère la réponse du serveur à l'aide de fopen.
Voilà mon code pour le moment:
(pour ceux qui ne connaissent pas la fonction stream_context_create: voir exemple sur la page http://lu.php.net/manual/fr/function.stream-context-create.php)
$fichier='image.png';
$fichier=chunk_split(base64_encode(file_get_contents($fichier)));
$opts = array(
'http'=>array(
'method' => 'POST',
'header' => "Host: blablabla.fr\r\n" .
"User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n" .
"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n" .
"Accept-language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3\r\n" .
"Accept-Encoding: gzip,deflate\r\n" .
"Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n".
"Keep-Alive:300\r\n".
"Connection:keep-alive\r\n".
"Referer:blablabla\r\n".
"Content-Type:multipart/form-data; boundary=-----------------------------306262331012750\r\n".
"\r\n".
"-----------------------------306262331012750\r\n".
"Content-Disposition: form-data; name=\"image\"; filename=\"image.png\"\r\n".
"Content-Type: image/png\r\n".
"Content-Transfer-Encoding: base64\r\n".
"\r\n".
"$fichier\r\n".
"-----------------------------306262331012750--\r\n"
)
);
$context = stream_context_create($opts);
$fp = fopen("page.php", 'r', false, $context);
...
...
(Le numéro -----------------------------306262331012750 est choisi par hasard)
Je suis tombé sur la page http://www.commentcamarche.net/faq/sujet 2761 langages envoyer un mail avec piece jointe qui explique la requête HTTP à utiliser pour l'envoi d'un fichier dans le cas d'un mail et l'auteur précise que le principe est le même pour les pages web.
Mais je n'arrive pas à faire marcher le code... (la page de destination affirme qu'aucun fichier n'a été envoyé)!
Voilà.
Quelqu'un pourrait-il analyser ma requête PHP et essayer de voir ce qui cloche?
Merci!
Alex
PS: J'ai téléchargé le module complémentaire HttpFox pour Firefox qui affiche les requêtes/réponses HTTP envoyées/reçues par le navigateur mais ce dernier affiche tout dans un tableau et dans différents onglets ... Ne connaissez-vous pas de programme qui affiche les requêtes "en brut", c-àd la requête complète et intouchée envoyée par le navigateur (et les réponses du serveur) au format texte?
(Cela m'aiderait pour essayer à résoudre ce problème)Configuration: Windows Vista
Firefox 2.0.0.14

