2010-07-15 5 views
1

J'ai une forme comme ceci:En utilisant PHP et boucle pour poster un formulaire HTML qui contient un fichier

<form method="POST" action="i.php" enctype="multipart/form-data"> 
<input type="text" name="field1"> 
<input type="text" name="field2"> 
<input type="file" name="file"> 
<input type="hidden" name="MAX_FILE_SIZE" value="100000"> 
<input type="submit"> 
</form> 

Sur la page J'ai déjà:

$URL = 'http://somewhere.com/catch.php'; 
$fields = array('field1'=>urlencode($_POST['field1'), 'field2'=>urlencode($_POST['field2')); 

    foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }; 

    rtrim($fields_string,'&'); 
    $ch = curl_init(); 

    curl_setopt($ch,CURLOPT_URL,$URL); 
    curl_setopt($ch,CURLOPT_POST,count($fields)); 
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); 

    $result = curl_exec($ch); 

    curl_close($ch); 

qui travaille à afficher le field1 & 2 champs. Est-il possible d'inclure le fichier dans ce processus de curl en quelque sorte? Comment ferais-je cela? Je suppose que je dois faire plus que simplement encoder la valeur du fichier.

donc basée sur la réponse de SimpleCoders je mis à jour à ce qui suit:

$URL = 'http://somewhere.com/catch.php'; 
$fields = array('field1'=>urlencode($_POST['field1'), 'field2'=>urlencode($_POST['field2'), 'files'=>'@'. $_FILES['file']['tmp_name']); 

    foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }; 

    rtrim($fields_string,'&'); 
    $ch = curl_init(); 

    curl_setopt($ch,CURLOPT_URL,$URL); 
    curl_setopt($ch,CURLOPT_POST, 1); 
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); 

    $result = curl_exec($ch); 

    curl_close($ch); 

qui affiche OK, mais alors mon résultat tableau $ _FILES sur catch.php est vide. Accor à l'exemple n ° 2 sur http://www.php.net/manual/en/function.curl-setopt.php Cela devrait fonctionner. Je fais cela sur deux domaines différents ... cela pourrait-il être un problème?

Répondre

2

Essayez quelque chose comme ça, pris from here:

$file_to_upload = array('file_contents'=>'@'.$file_name_with_full_path); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$target_url); 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $file_to_upload); 
$result=curl_exec ($ch); 
curl_close ($ch); 
echo $result; 

Voir également https://secure.php.net/manual/en/class.curlfile.php, qui semble être un moyen plus facile, plus moderne de le faire.

+0

Puisqu'il n'y a aucune garantie sur la vie d'un lien externe, pouvez-vous poster l'information ici, et laisser la référence? –

+1

@Empathy: bien sûr, fait –

+0

La communauté, et ceux à venir, merci. :) –

1

Vous devez suivre SimpleCoders réponse mais changer votre

$fields_string 

juste

$fields. 

De http://www.php.net/manual/en/function.curl-setopt.php

Note: Le passage d'un tableau à CURLOPT_POSTFIELDS va coder les données multipart/form-data, en passant une chaîne codée par URL codera les données en tant qu'application/x-www-form-urlencoded.

Questions connexes