Communication automatique entre deus serveurs web php/mysql

Fermé
mazcatouss86 Messages postés 13 Date d'inscription mardi 26 février 2013 Statut Membre Dernière intervention 21 mars 2013 - 26 févr. 2013 à 05:12
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 7 mars 2013 à 11:03
Bonjour,


bonjour,
je suis en train de développer une application web avec php/mysql,j'ai 2 serveurs web que j'ai besoin de les mettre en communication automatique.
c'est à dire lorsque j'ai des variables quelconques sur le premier serveur ,je veux les envoyer à l'autre serveur automatiquement sans mon intervention chaque fois et lorsque le 2eme serveur les reçoit ,il les subit un traitement spécifique tel que l'enregistrement dans sa base de données .c'est comme une boucle
ma question alors avec quelle technique je peux faire tout ça ????
Merci d'avance

5 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 févr. 2013 à 18:53
oui cron c'est le monde Unix, amis les hebergeurs nomment ça parfois tache planifiée
1
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
Modifié par [Dal] le 26/02/2013 à 19:38
Salut mazcatouss86,

Comme ton action est déclenchée par un client qui sollicite le srv1, le plus simple, à mon sens, est de :

1- programmer ton script Php appelé sur srv1 pour appeler à son tour srv2 avec les paramètres que tu veux,
2- pour cela, tu utiliseras une requête GET générée par cURL, https://www.php.net/manual/fr/book.curl.php si tu ne passes que 3 paramètres avec peu de données dedans (ou POST si beaucoup de données)
3- cette requête sur srv2 fait ce que tu veux faire avec les paramètres passés (mise à jour d'une base, etc.)
4- obtenir le résultat de cette requête sur srv1 (retour de la fonction cURL)
5- le renvoyer au client ayant établit la session avec srv1 sous la forme souhaitée

Si srv1 et srv2 sont sur le même serveur et partagent le même serveur Mysql, ils peuvent aussi accéder aux mêmes données (en accédant à la même table de la même base de donnée), ce qui peut simplifier l'étape 3. Je ne sais pas si c'est ton cas.


Dal
1
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
Modifié par [Dal] le 27/02/2013 à 10:10
En fait, depuis Php 4.3 tu peux même faire des requêtes GET ou POST simples sans cURL (cURL peut ne pas être disponible sur ton hébergement), en créant des "contextes de flux" avec stream_context_create.

https://www.php.net/manual/fr/function.stream-context-create.php

Tu as aussi un exemple là : http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/

La solution de Alain_42 est tout aussi valable, mais elle opère par redirections successives (avec la fonction Php header), qui sont vues par l'utilisateur, dont le navigateur va passer de l'adresse de srv1 à celle de srv2, puis de nouveau à srv1 (cf. https://forums.commentcamarche.net/forum/affich-27227895-communication-automatique-entre-deus-serveurs-web-php-mysql#5).

Utiliser cURL ou les fonctions natives de Php te permet de générer tes requêtes vers srv2 de façon transparente pour l'utilisateur, qui "reste" sur srv1 de son point de vue.

S'agissant de Cron, tu auras compris qu'il n'est donc pas utile, puisque tu précises que la requête initiale est formée par le client "android" qui sollicite le srv1 (ce que tu avais omis de mentionner dans ton post initial), et qu'il n'est donc pas nécessaire de déclencher srv1 par un autre moyen.


Dal
0
mazcatouss86 Messages postés 13 Date d'inscription mardi 26 février 2013 Statut Membre Dernière intervention 21 mars 2013
27 févr. 2013 à 12:31
Merci beaucoup :)
Je vais essayer alors CURL & à propos l'hebergement je vais utiliser pour le moment le 00.host.com mais je sais pas si'il supporte la méthode CURL!!
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
Modifié par [Dal] le 27/02/2013 à 13:49
Tu peux obtenir toutes les informations sur ton installation Php avec la fonction phpinfo().

<?php    

phpinfo();    

?>

Si cURL est inclus, tu as une section "CURL" qui s'affiche avec l'indication "CURL support" "enabled". Tu sauras aussi quelle est la version de Php utilisée et, si elle est au moins égale à 4.3, si tu peux utiliser la méthode native stream_context_create pour créer des requêtes simples (au lieu de cURL, qui peut être plus compliqué à mettre en oeuvre).


Dal
0
mazcatouss86 Messages postés 13 Date d'inscription mardi 26 février 2013 Statut Membre Dernière intervention 21 mars 2013
27 févr. 2013 à 14:12
@Dal
Merci Dal,
j'ai choisis alos d'apprendre CURL car ça me parait " more efficient" ,j'ai fait un petit essai,j'espère que vous me donnez votre avis à propos l'affichage dans le navigateur de données transmis from Android et que j'essayé de les transmettre au deuxieme serveur avec CURL .
thanks a lot my friend :)
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
27 févr. 2013 à 10:28
oui effectivement avec cUrl ça doit être mieux.
1
mazcatouss86 Messages postés 13 Date d'inscription mardi 26 février 2013 Statut Membre Dernière intervention 21 mars 2013
27 févr. 2013 à 12:34
Merci Alain_42 vous m'avez aidé beaucoup mon ami :)
merci c'est genial de parler avec vous les amis, je vais essayer maintenant le CURL
wish me luck :)
0
mazcatouss86 Messages postés 13 Date d'inscription mardi 26 février 2013 Statut Membre Dernière intervention 21 mars 2013
27 févr. 2013 à 14:06
Meric mes amis,
comme vous m'avez conseillé alors j'ai fait un petit script pour commencer avec cette technique,CURL.
Mais j'ai rencontré un probléme,j'arrive pas à transmettre les données reçus de la part d'android au deuxieme serveur pourant je l'ai inséré correctement dans la base de données de premier serveur et je suis encore sur le serveur local.A noter que j'ai l'essayeé avec des simples variables & ça tourne bien .

voilà alors mes script:
c'est celui de premier serveur ,qui se charge de reçevoir les données de la part d'android:
<?php

    // donnees reçus de la part de client Android
    $name_mobinaute = $_POST['name_mobinaute'];
    $email_mobinaute = $_POST['email_mobinaute'];
    $adress_mobinaute = $_POST['adress_mobinaute'];
    $cin_mobinaute = $_POST['cin_mobinaute'];
    $code_bancaire_mobinaute = $_POST['code_bancaire_mobinaute'];
    $date_transaction_mobinaute = $_POST['date_transaction_mobinaute'];
echo $name_mobinaute; 

$url = "http://localhost/deuxieme_serveur/target_test.php";
$ch = curl_init();

// set the target url
curl_setopt($ch, CURLOPT_URL,$url);

// howmany parameter to post
curl_setopt($ch, CURLOPT_POST, 1);

// un petit essai avec curl,seullement un transfert d'une seule variable 
curl_setopt($ch, CURLOPT_POSTFIELDS,"variable1=$name_mobinaute");


$result= curl_exec ($ch);
curl_close ($ch); 
print $result;

?>



et voilà celui de deuxieme serveur:

<?php
$result1=$_POST[variable1];
print $result1;
?>


c'est où l'erreur ??bien j'utilise LAMP et un navigateur Mozilla v13
Merci mes amis :)
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
27 févr. 2013 à 14:29
Essaye ceci :

<?php

$name_mobinaute = "testname";

$url = "http://localhost/deuxieme_serveur/target_test.php";
$post_data = array(
    'variable1' => $name_mobinaute
);

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);

$result = curl_exec($curl);
curl_close($curl);

echo "<p>result = $result</p>";
?>

Dal
0
mazcatouss86 Messages postés 13 Date d'inscription mardi 26 février 2013 Statut Membre Dernière intervention 21 mars 2013
Modifié par mazcatouss86 le 27/02/2013 à 14:42
ça me donne
result = testname
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
27 févr. 2013 à 14:42
Donc, cela a fonctionné :-)
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 094
27 févr. 2013 à 14:42
Note que si tu transfères des données sensibles, c'est effectivement mieux de faire une requête POST, mais tu devrais aussi t'interroger sur l'usage d'un hébergement supportant https, et l'investissement dans les 2 certificats de serveurs, pour que la connexion soit chiffrée de bout en bout (entre le client et srv1 et entre srv1 et srv2). cURL supporte https.

A la limite, tu peux disposer d'un certificat autosigné pour srv2, et paramétrer cURL pour passer outre la chaîne de vérifications du certificat pour la communication entre srv1 et srv2. Mais un vrai certificat signé est mieux pour prévenir des attaques "man in the middle".


Dal
0
mazcatouss86 Messages postés 13 Date d'inscription mardi 26 février 2013 Statut Membre Dernière intervention 21 mars 2013
Modifié par mazcatouss86 le 27/02/2013 à 15:18
Merci Dal pour toutes ses informations,je vais insérer un certificat '.cert ' au niveau de chaque serveur,en faite j'arrive pas à reçevoir dans le 2eme serveur la variable $name_mobinaute lorsque elle vaut $_POST['name_mobinaute'] c'est à dire donnée provenant from Android!!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 févr. 2013 à 18:01
Une piste:

j'ai des variables quelconques sur le premier serveur elles sont où, combien ?

tu peux créer un premier script php sur serveur1
qui va lire ces variables et sera lancé par une tache programmée (cron ) de ton serveur1
php ne peut pas se lancer tout seul

ce sript php appellera un script php sur le serveur2 en lui passant les variables via l'url par la fonction header()
script serveur1
//lectures variables ex 
$var1=....;
$var2=....;
$var3=....;
etc..
//appel script serveur2
header('Location:http://serveurs2/page_receptrice.php?var1='.$var1.'&var2='.$var2.'&var3='.$var3.' ');


script php serveur2: page_receptrice.php
//reception valeurs
$var1=$_GET['var1'];
$var2="$_GET['var2'];
$var3="$_GET['var3'];
//puis enregistrement dans ta BDD
-1
mazcatouss86 Messages postés 13 Date d'inscription mardi 26 février 2013 Statut Membre Dernière intervention 21 mars 2013
Modifié par mazcatouss86 le 26/02/2013 à 18:54
Merci beauuuucoup Alain_42
you saved my life :)
juste vous avez mentionnez la technique "cron" , celle de monde UNIX ???
& concernant le nombre de variables c'est 3. Ses variables j'ai eu de la part de mon application android.

le scénario c'est d'envoyer 3 variables de la part de client "Android " vers le premier serveur (php/mysql) et celui-ci il vas l'envoyer vers le 2eme serveur(php/mysql) .A la suite le 2eme serveur renvoie un message de résultat de traittement de variables au premier serveur & ce dernier renvoi aussi un message au mobinaute (client Android)

pour l'instant j'ai réussi à communiquer le premier serveur et le client Android mais mon probléme comme j'ai dit c'est la communication entre les deux serveurs


client Android --->premier serveur---> deuxieme serveur --->
premier serveur--->client Android


please help me
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 févr. 2013 à 21:03
pour faire l'appel "retour" du 2 ieme serveur vers le premier tu rajoutes à la fin du script page_receptrice.php un header('Location:http://servuer1/script_retour.php?reponse='.$reponse.' ');
$reponse étant un résultat de bon enrgistrement dans la bdd par exemple

et dans ce nouveau script php tu récupères la réponse en $_GET et --> client Android
0