Communication automatique entre deus serveurs web php/mysql
mazcatouss86
Messages postés
13
Statut
Membre
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
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
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
A voir également:
- Deus communication
- Deus ex: the fall - Télécharger - Tir FPS
- Near-field communication - Guide
- La communication via ssl a echoue ps vita ✓ - Forum Google Chrome
- Une erreur de communication est détectée dans le module de sécurité - Forum TNT / Satellite / Réception
- Branchement coffret de communication fibre optique ✓ - Forum câblage
5 réponses
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
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
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
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
Tu peux obtenir toutes les informations sur ton installation Php avec la fonction 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
<?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
@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 :)
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 :)
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:
et voilà celui de deuxieme serveur:
c'est où l'erreur ??bien j'utilise LAMP et un navigateur Mozilla v13
Merci 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 :)
Essaye ceci :
Dal
<?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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
script php serveur2: page_receptrice.php
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
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
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
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
$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