2010-06-08 5 views
1

J'essaye d'utiliser cURL pour transférer sur une demande http d'un formulaire dans une application web que je développe. Essentiellement, je dois soumettre le même formulaire deux fois sur des serveurs différents, pour le second serveur, j'ajoute des mesures de sécurité aux données de poste.

Je peux recevoir des informations _POST $ sur le deuxième formulaire parfaitement bien, mais j'ai des problèmes majeurs avec mes $ _FILES - J'ai essayé de séparer les deux afin qu'il y ait une demande séparée pour les données postales et les fichiers .

Est-ce possible?

+0

Vous pouvez essayer de coder en base64 les données d'image et de les envoyer en tant que demande de publication, mais je ne suis pas sûr que cela fonctionnerait exactement comme vous le souhaitez. – Sam152

Répondre

2
<?php 
$filename = '/foo/bar'; 
$postargs = array(
    'foo' =>'bar', //normal postfield 
    'fileentry' => '@'.$filename //be sure to give it as an absolute path!, $_FILES['fileentry']['tmp_name'] usually has this 
); 

$ch = curl_init(); 
//other stuff with curl 
curl_setopt($ch,CURL_POSTFIELDS, $postargs);//give as array for proper encoding. 
curl_exec(); 
?> 
+0

Non ce ne serait pas, sinon ce serait une réponse très étrange à la question, non? Le manuel est votre ami: http://www.php.net/curl_setopt – Wrikken

+0

Désolé, j'ai vérifié le manuel et supprimé le commentaire avant votre réponse. Je vois maintenant que non. Toujours, syntaxe étrange. Je me demande si je voulais que la valeur de mon champ commence par '@' ... – Artefacto

+0

Je me demandais toujours moi-même. Je soupçonne que la mise en œuvre de PHP Curl est un peu de l'ancien temps, le temps où ils pensaient que magic_quotes était une bonne idée, etc :). Et dès qu'il est dans, vous ne pouvez pas le sortir sans casser le code. – Wrikken

0

Vous pouvez:

  • vigueur PHP ne pas traiter les fichiers (voir this question pour plus de détails);
  • utiliser curl pour soumettre file_get_contents('php://input') en tant que données brutes (voir this question pour les détails). Vous devrez également transférer certains en-têtes HTTP avec CURLOPT_HTTPHEADER, à savoir et Content-type.

Cela évite de heurter le système de fichiers.

+0

php: // l'entrée n'est pas remplie sur une requête multipart/form-data enctype autant que je sache, et c'est une exigence pour fileuploads, donc vous ne pouvez pas envoyer le fichier de cette façon. Voir: http://nl2.php.net/manual/fr/wrappers.php.php – Wrikken

+0

@Wrikken: d'où la première partie "force PHP à ne pas traiter les fichiers" – Artefacto

+0

@Wrikken PHP ne verra pas la requête comme étant 'multipart/form-data' si vous suivez la réponse dans la question liée. – Artefacto

Questions connexes