Version complète: sur le forum Webmaster Hub : syntaxe CURL
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
lorik
Bonjour,

Je patine avec une ligne de code curl :
Je veux executer un script distant avec curl (pas de problème à priori, j'utilise déja, sans trop comprendre, un bout de code qui marche bien).
Mais je veux aussi récuperer le résultat du script distant. Et ça c'est nouveau pour moi.

donc dans le script distant, je termine avec
CODE
/* mon code à executer */
return $mavariablearecuperer;


Et dans mon script appellant, j'utilise curl :
CODE
$urlscript="http://www.site.fr/monscript.php";
$ch = curl_init();
// Définition de l'URL et autres options appropriées
curl_setopt($ch, CURLOPT_URL, $urlscript);
curl_setopt($ch, CURLOPT_HEADER, false);
// Récupération de l'URL et passage au navigateur
$result=curl_exec($ch);
// Fermeture de la ressource CURL et libération des ressources systèmes
curl_close($ch);

echo "resultat=".$result;


Le problème est que le code ci-dessus me renvoie $result=1, ce qui signifie que ça s'est bien passé, (ce qui est déja ça), mais pas $mavariablearecuperer.

J'ai vu dans une doc qu'il faut ajouter une option CURLOPT_RETURNTRANSFER à curl_setopt, avec TRUE, mais je ne vois pas la syntaxe de l'instruction...

Et je ne suis pas sur que mon return $mavariablearecuperer soit très indiqué dans ce cas.

Merci de votre coup de main.
Dan
Salut,

Tout simplement avec:
CODE
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

appelé avant ton curl_exec()

Il faut aussi que ton code distant imprime les valeurs à retourner... donc print ou echo plutôt que return() ;

wink.gif Dan
lorik
Saint Dan veille toujours sur nous ! merci, merci....

Mais là, il y a un problème :

CODE
 curl_setopt($ch, CURLOPT_URL, $cookie);
 curl_setopt($ch, CURLOPT_HEADER, false);
 curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // pour que le script renvoi la variable
 // Récupération de l'URL et passage au navigateur
 $result=curl_exec($ch);


J'ai toujours mon renvoie de 1, et pas $mavariable...
Dan
CITATION(Dan @ jeudi 16 février 2006, 16h07)
Il faut aussi que ton code distant imprime les valeurs à retourner... donc print ou echo plutôt que return() ;
*

As-tu changé ton return() en print ou echo ?
Si le programme appelé n'affiche rien, il ne renverra rien à curl_exec() wink.gif

Dan
lorik
Merci Dan, et mille excuses... je n'avais pas lu ton post jusqu'au bout wub.gif

Effectivement, avec un echo, tout marche nickel

Longue vie !
trihanhcie
Bonjour, sur les conseils de lorki, je viens vous demander de l'aide biggrin.gif

Voila sur un site1.com j'ai créé des cookies. Et j'aimerai que, sur le site2.fr, je récupère les données qui sont dans le cookie créé par site1.com...

Apparement, je peux utiliser Curl(c'est installé sur le serveur) smile.gif Quelqu un peut me donner un cours accélérer de curl et de l'utilisation des cookies avec curl? wink.gif

Merci
lorik
Coucou trihanhcie,

Je me suis mal fais comprendre dans le MP : Il n'est pas question de récuperer le contenu du cookie ! Pas possible !

Seulement de récuperer un RESULTAT d'un script distant, ce script distant se chargeant d'interroger sa base locale.

tu devrais effectivement trouver de la matiere à reflexion dans ce post.
trihanhcie
Oups... c'est moi qui ai mal lu ton mp lorki dsl... blush.gif

Ca me pose un problème ca ... Mais dans ce cas, je ne vois pas tellement l'intéret de curl en fait pour tout te dire... C'est pour ne pas utiliser les formulaires?

Si c'est juste pour récupérer des informations sur le site2 qui sont stockées dans une base de donnée du site1, pourquoi ne pas utiliser un simple post ?

En fait, pour mon problème, toute la base de donnée est bien sur le site1. Le site2, tout ce qu il doit faire, c'est faire tourner en fond un script du site1 qui utilise des cookies qui sont créés par le site1... et c'est ca qui fonctionne pas biggrin.gif
lorik
D'ou CURL...

wink.gif
trihanhcie
heuu je dois etre long à la détente la... blush.gif

Ca veut dire que c'est sur le site2, qui va appeler un script du site1 que je dois utiliser curl? :s

Ca va pas être évident ca j'aurai bien voulu que sur le site 2, il n'y ait que un img src :'(. je vais essayer ca qd mme si j'y arrive un jour biggrin.gif

Ce serait comment alors? Sur la page du site2, j'aurai qq chose comme :

CODE
$urlscript="http://www.site1.fr/compteur.php";
$ch = curl_init();
// Définition de l'URL et autres options appropriées
curl_setopt($ch, CURLOPT_URL, $urlscript);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
// Récupération de l'URL et passage au navigateur
$result=curl_exec($ch);
// Fermeture de la ressource CURL et libération des ressources systèmes
curl_close($ch);

echo "resultat=".$result;


(je comprends pas grand chose la, j'ai repris ton code lorik je regarderai apres plus attentivement)
lorik
Oui c'est ça.

Dans $result, tu aura le nombre de visites extrait de ta BDD par le script compteur.php.
trihanhcie
Mince... donc impossible de s'en sortir juste avec un img src ou un équivalent sur le site 2?

Ca veut dire que, à chaque fois qu'un nouveau site voudra se joindre à mon compteur, il faudra d'une part que son hébergeur ait les librairies curl d'installer et d'autre part qu il mette mon bout de code sur sa page d'accueil? sad.gif
lorik
tu me mets le doute...

Curl je l'utilise pour des scripts purement PHP, sans html.

Peut être qu'un img src ou un script src peut faire l'affaire, mais là je ne sais plus...
trihanhcie
Heu... bah ca marche pas super biggrin.gif


Need help !!

CODE

<?

$urlscript="http://www.site.fr/compteur.php";
$ch = curl_init();
// Définition de l'URL et autres options appropriées
curl_setopt($ch, CURLOPT_URL, $urlscript);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch,CURLOPT_COOKIE,"CheckCookie=CheckCookie; domain=.site.fr; path=/test/");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch,CURLOPT_USERPWD, '[username]:[password]');

$data = curl_exec($ch);
// Fermeture de la ressource CURL et libération des ressources systèmes
curl_close($ch);
?>



Bon plusieurs questions :

Ce que je veux faire, c'est bien de lancer le script compteur.php sur le site.fr pour qu il fasse des requetes sur la bdd et dont une partie des données se trouve dans des cookies.

compteur.php a écrit des cookies sur le pc client en lancant le script avec curl que je viens d'écrire à partir du site2, est ce que compteur.php va faire les requetes qu il faut et "lire" les données qui ont été écrite?

Merci smile.gif
lorik
Non, on ne s'est pas compris :
-Compteur.php est appellé par un img src, et enregistre la visite dans une base de données. Il implante aussi le cookie qui evite les doublons (voir mon MP). Le cookie ne sert qu'a ça, pas à stocker des données statistiques. seulement à flaguer l'internaute comme 'déja enregistré'. Les données se trouvent dans la base de données.
- tu dois avoir un deuxieme script (disons stat.php) dont le role est d'extraire les stats de la base de données, et de les placer dans une variable (disons $stats).

c'est stat.php qui doit etre appellé par CURL, pour afficher le contenu de $stats.

Ou alors je n'ai pas compris ce que tu veux faire...
trihanhcie
Je t'explique ca en mp smile.gif
NorSeb
Bonjour,

Juste pour dire : les MP c'est bien, mais cela peut peut-être intéresser du monde wink.gif
trihanhcie
En fait... Bon la raison pour laquelle je fais ca c'est que je suis en stage et ce que je ne peux pas vraiment tout dire sur ce que je fais... Secret proffesionnel quoi tongue.gif

Comme j'ai dit à Lorik, je vais essayer d'expliquer un peu mieux...

En fait, sur mon site2, tout ce que je dois faire, c'est exécuté mon script sur le site1 qui, lui, utilise des données qui sont dans les cookies écrit par le site1 et interrogeant ainsi la base de donnée. Ce serait bien que mon site2 ait juste qq chose comme un img src pour exécuter le script du site1 whistling.gif

Seulement, si j'utilise juste img src sur le site2 pour lancer mon script sur le site1, le script du site1 ne s exécute pas correctement. Comment je sais ca? Une fois que les cookies étaient écrits par le site1, j'ai essayé d'écrire les données des cookies dans un fichier sur le serveur du site1 en lancant le script avec img src à partir du site2 et rien a été écrit dans le fichier. Pourtant, qd je lance le script "à la main" c'est à dire que j'exécute directement le script avec l'url du script de mon site1, ca fonctionne, c'est à dire que les données des cookies sont bien pris en compte et les requetes dans ma base de données sont bien faites.

Mon site2 n'a donc pas besoin d'avoir les données sur site1 de retour en fait... Désolé de t'avoir induit en erreur avec ma question de compteur ...

Voila désolé pour les coups des mp... J'espère que j'ai été plus clair wink.gif

Ah oui autre chose ... Juste pour information, le img src fonctionne sous firefox ... C'est à dire qu'il me lance bien le script du site1 et que les cookies sont bien lus... Qq a une explication? biggrin.gif
lorik
Je vois le truc... je crois !

Pour les img src, c'est le bon système, oublie CURL.

Par contre, à mon avis, ta politique de confidentialité n'est pas correcte, et le poste client, quand il affiche ton site 2, refuse le cookie implanté par le site 1.

Revois le post sur les cookies épinglé (c'est la qu'on s'est connu, hier déja, sniff biggrin.gif ).

As tu mis le fichier xml à la racine de ton site 1 (celui qui implante les cookies) ?

J'utilise très exactement ce que tu veux faire, et des img src + politique de confidentialité, ça marche nickel.

donc revois ton code...
trihanhcie
C bien ce que je me disais..

Mais si tu veux je me vois mal dire à chaque personne : "mon script marche pas parce que votre politique de confidentialité sur internet explorer n'est pas la bonne, veuillez changer"...

Le fichier xml je l'ai pas mis à la racine mais dans le dossier où j'ai mon script ... ca change qq chose?
lorik
Salut,

Là, je peux plus rien pour toi. Lis et essaie de comprendre le post dont je t'ai parlé, tout y est pour que ça marche, et notamment là ou il faut mettre les fichiers, la syntaxe, etc...
trihanhcie
ok merci biggrin.gif smile.gif je vais regarder ca ...
je te tiens au courant smile.gif
trihanhcie
Ca marche !
J'avais oublié de mettre le header pour le fichier xml ds certains de mes fichiers qui créaient les cookies whistling.gif Merci pour tout lorik
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.