PHP - Télécharger un fichier image vers un autre domaine avec CURL
J'ai deux domaine, à titre d'exemple site1.loc et site2.loc. Dans site1.loc j'ai un fichier de formulaire php comme ceci:
<?php
$c_name = "";
$c_phone = "";
if($_SERVER['REQUEST_METHOD']=="POST"){
$c_name = $_POST['c_name'];
$c_phone = $_POST['c_phone'];
$c_pic = $_FILES['c_pic']['name']; //Image file
//submit target URL
$url = 'http://site2.loc/handler.php';
$fields = array(
'field1'=>$c_name,
'field2'=>$c_phone,
'field3'=>$c_pic
);
$postvars='';
$sep='';
foreach($fields as $key=>$value)
{
$postvars.= $sep.urlencode($key).'='.urlencode($value);
$sep='&';
}
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$postvars);
//execute post
$result = curl_exec($ch);
if(curl_errno($ch)) {
echo 'Error: ' . curl_error($ch);
}
else {
echo $result;
}
//close connection
curl_close($ch);
}
echo '
<form action="" method="post" enctype="multipart/form-data">
Name : <input type="text" name="c_name" value="'.$c_name.'" /> <br />
Phone : <input type="text" name="c_phone" value="'.$c_phone.'" /> <br />
Image : <input type="file" name="c_pic" /> <br />
<input type="submit" />
</form>
';
?>
et handler.php dans site2.loc comme ceci:
<?php
ob_start();
if (!isset($_SESSION)) { session_start(); }
//CONNECT TO DB
$db_con = mysql_connect("localhost", "root", "root");//or die("Could not connect to db.");
if(!mysql_select_db("site2",$db_con)) die("No database selected.");
//POST
if(isset($_POST)){
$c_name = $_POST['field1'];
$c_phone = $_POST['field2'];
$c_pic = $_POST['field3'];
//UPLOAD FILE
/* UPLOAD IMAGE CODE HERE */
//INSERT TO DB
if(mysql_query("INSERT INTO kontak (nama, telpon) VALUES ('$c_name','$c_phone')")){
echo "INSERT SUCCESS";
} else {
echo "INSERT FAILED";
}
}
?>
Ce script s'exécute bien pour stocker les données de la base de données, mais ne peut pas pour télécharger un fichier image. Quelqu'un peut-il m'aider à modifier les scripts ci-dessus afin de télécharger un fichier image?
Grâce avant.
OriginalL'auteur Fredy | 2013-05-16
Vous devez vous connecter pour publier un commentaire.
Pas de code dans cette réponse, juste un flux de travail exemple de dérivation
curl
:file_get_contents('http://site2.loc/pullfile.php?f=filename&sec=checkcode')
appel. Le contenu depullfile.php
va le faire, tirez sur le fichier à partir du site "1" à "site 2".file_get_contents()
peut être vérifiée pour une erreur de retour à partir du "site 2"pullfile.php
et en cas d'erreur, traiter avec elle. Pas d'erreur, supprimez le fichier temp.&sec=checkcode
pourrait être utilisée pour confirmer le fichier a été téléchargé avec succès à "site 2". Il pourrait être un MD5 du fichier ou quelque chose d'autre que vous venez avec.Juste une idée.
Modifier: un exemple de code pour aider à rendre les choses plus claires, peut-être :]
Et ce sera le pullfile.php " sur le site 2
Parce qu'il n'est pas nécessaire et certains serveurs ne comprennent pas l'extension curl.
La question spécifiquement indiqué que l'utilisation de curl, donc je suppose que Fredy a disposition sur son serveur.
Pour moi, personnellement, un
file_get_contents($url)
appel est beaucoup moins complexe que de traiter aveccurl
et tout ce qui est nécessaire pour faire unpost
appel avec elle.Le problème, c'est que vous avez à traiter avec délai d'attente échecs de vous-même parce que finalement, une demande d'échouer et de l'image ne seront pas retirés à partir site1 alors que dans la boucle de l'option sans stockage de l'image entre PHP va nettoyer le fichier lui-même à partir du répertoire temp après l'exécution du script terminé.
OriginalL'auteur Tigger
http://php.net/manual/en/function.curl-setopt.php
Extrait de Code:
OriginalL'auteur kav
La façon dont vous êtes en train de faire maintenant ne fonctionnera pas parce que votre serveur n'a pas envoyer le fichier sur le serveur distant, mais le nom local (de l'utilisateur). Aussi le transfert d'un fichier via CURL, vous devez ajouter un '@' devant le nom.
Ensuite le script à distance a également pour obtenir le fichier à partir de la variable $_FILES variable et le copier quelque part avec
move_uploaded_file
(PHP.net)Également un conseil: vérifiez
$_FILES['c_pic']['error']
avant de le faire pour empêcher le téléchargement des ordures sur le serveur distant.OriginalL'auteur jabbink
Curl télécharger des fichiers
OriginalL'auteur Tutti Frutti