Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Transmettre des données en POST d'un script à un autre

6 réponses
Avatar
Didier
Bonjour à tous.
Programmeur amateur, je n'arrive pas à résoudre le problème suivant :
un script php, envoi.php, sur un serveur A, doit transmettre à un autre
script php, reception.php, sur un autre serveur B, des données par la
méthode post, de manière transparente à l'utilisateur côté script envoi.php.
Le script reception.php utilisera ces données pour les insérer dans une
base de données, mais ce point n'est pas un souci.
Je fais des essais avec fsockopen en utilisant le code que l'on trouve
en plein d'exemplaires sur le net.
Ce que je ne comprends pas, c'est comment je récupère les données dans
le script reception.php; que j'exécute ce script, mes variables
$_POST['....'] sont vides.
Au pire je ferai un formulaire avec des champs hidden, mais je voulais
comprendre cette piste de fsockopen avant de l'abandonner.
Merci.
Didier.

6 réponses

Avatar
Vincent Verdon
Bonjour,

Le 06/06/2012 22:44, Didier a écrit :
Bonjour à tous.
Programmeur amateur, je n'arrive pas à résoudre le problème suivant :
un script php, envoi.php, sur un serveur A, doit transmettre à un autre
script php, reception.php, sur un autre serveur B, des données par la
méthode post, de manière transparente à l'utilisateur côté script
envoi.php.
Le script reception.php utilisera ces données pour les insérer dans une
base de données, mais ce point n'est pas un souci.
Je fais des essais avec fsockopen en utilisant le code que l'on trouve
en plein d'exemplaires sur le net.
Ce que je ne comprends pas, c'est comment je récupère les données dans
le script reception.php; que j'exécute ce script, mes variables
$_POST['....'] sont vides.
Au pire je ferai un formulaire avec des champs hidden, mais je voulais
comprendre cette piste de fsockopen avant de l'abandonner.
Merci.
Didier.




Personnellement, je trouve un peu alambiqué d'utilisé un socket pour
communiquer dans une appli web. J'opterais plutôt pour des balises hidden.

Mais c'est faisable. Le code suivant, pompé dans la doc PHP fonctionne
parfaitement.

Script d'appel :
-----------------

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Post par socket en PHP</title>
</head>
<body>
<?php
//ouverture du socket TCP
$fp = fsockopen("127.0.0.1", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />n";
} else {
//On forme les données à envoyer (HTTP1.1)
$out = "POST /vv/Divers_PHP/essai_socket/reception.php HTTP/1.1rn";
$out .= "Host: 127.0.0.1rn";
$out .= "Connection: Closern";
$out .= "Content-type: application/x-www-form-urlencodedrn";
$out .= "Content-Length: 20rnrn";
$out .= "essai=juste un essairn";
//envoi des données
fwrite($fp, $out);

//récupération de la page renvoyée par le serveur Web
//(inutile s'il s'agit uniquement de poster des données)
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>

</body>
</html>
-----------------------


Script de traitement (reception.php) :
-----------------------

<?php
//affichage du contenu du tableau $_POST
print_r($_POST);
?>
-----------------------

Amicalement, Vincent Verdon
Avatar
Didier
Le 08/06/2012 16:00, Vincent Verdon a écrit :
Bonjour,

Le 06/06/2012 22:44, Didier a écrit :
Bonjour à tous.
Programmeur amateur, je n'arrive pas à résoudre le problème suivant :
un script php, envoi.php, sur un serveur A, doit transmettre à un autre
script php, reception.php, sur un autre serveur B, des données par la
méthode post, de manière transparente à l'utilisateur côté script
envoi.php.
Le script reception.php utilisera ces données pour les insérer dans une
base de données, mais ce point n'est pas un souci.
Je fais des essais avec fsockopen en utilisant le code que l'on trouve
en plein d'exemplaires sur le net.
Ce que je ne comprends pas, c'est comment je récupère les données dans
le script reception.php; que j'exécute ce script, mes variables
$_POST['....'] sont vides.
Au pire je ferai un formulaire avec des champs hidden, mais je voulais
comprendre cette piste de fsockopen avant de l'abandonner.
Merci.
Didier.




Personnellement, je trouve un peu alambiqué d'utilisé un socket pour
communiquer dans une appli web. J'opterais plutôt pour des balises hidden.

Mais c'est faisable. Le code suivant, pompé dans la doc PHP fonctionne
parfaitement.

Script d'appel :
-----------------

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Post par socket en PHP</title>
</head>
<body>
<?php
//ouverture du socket TCP
$fp = fsockopen("127.0.0.1", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />n";
} else {
//On forme les données à envoyer (HTTP1.1)
$out = "POST /vv/Divers_PHP/essai_socket/reception.php
HTTP/1.1rn";
$out .= "Host: 127.0.0.1rn";
$out .= "Connection: Closern";
$out .= "Content-type:
application/x-www-form-urlencodedrn";
$out .= "Content-Length: 20rnrn";
$out .= "essai=juste un essairn";
//envoi des données
fwrite($fp, $out);

//récupération de la page renvoyée par le serveur Web
//(inutile s'il s'agit uniquement de poster des données)
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>

</body>
</html>
-----------------------


Script de traitement (reception.php) :
-----------------------

<?php
//affichage du contenu du tableau $_POST
print_r($_POST);
?>
-----------------------

Amicalement, Vincent Verdon



Merci.
Finalement, un développeur maison m'a fait dévouvrir (un tout petit peu)
jquery, et ça s'est réglé comme ça.
A part la syntaxe qui se prend un peu pour du LISP parfois, c'est efficace.
Didier.
Avatar
Didier
Le 09/06/2012 00:11, Vincent Verdon a écrit :
Bonsoir,

Le 08/06/2012 21:40, Didier a écrit :

Merci.
Finalement, un développeur maison m'a fait dévouvrir (un tout petit peu)
jquery, et ça s'est réglé comme ça.



Là, je ne vois pas le rapport entre quelque chose (PHP) qui se passe
côté serveur et quelque chose (Javascript, Jquery) qui se passe du côté
navigateur. Vous venez de découvrir AJAX, c'est bien en tout cas !

Amicalement, Vincent Verdon


Je suis encore bien trop novice pour expliquer, mais en gros :
dans la page j'ai une liste de choix (select etc ...), avec un onChange
qui poinbt vers une fonction javacript qui fait appel à la librairie
jquery, et en paticulier je fais un $.post avec les paramètres qui vont
bien, et une fonction function(data) par laquelle je récupère ce que le
script php destinataire des données écrit via des echos.
Ce script de destination inscrira les données passée en POST dans une
base mysql, et renverra le code de réussite ou d'échec.
Donc, si j'ai bien compris, côté serveur du php génère une page avec du
javascript en utlisant la librairie jquery de j'ai déposée sur ce serveur.
Désolé pour autant d'imprécision.
Didier.
Avatar
Vincent Verdon
Bonsoir,

Le 08/06/2012 21:40, Didier a écrit :

Merci.
Finalement, un développeur maison m'a fait dévouvrir (un tout petit peu)
jquery, et ça s'est réglé comme ça.



Là, je ne vois pas le rapport entre quelque chose (PHP) qui se passe
côté serveur et quelque chose (Javascript, Jquery) qui se passe du côté
navigateur. Vous venez de découvrir AJAX, c'est bien en tout cas !

Amicalement, Vincent Verdon
Avatar
Didier
Le 09/06/2012 10:50, Vincent Verdon a écrit :
Il n'y a pas de problème, il faut bien commencer un jour !

Effectivement, PHP est un générateur de code HTML : il fabrique sur le
serveur le code HTML correspondant à la situation actuelle et à la page
demandée et l'envoie au client (le navigateur).
Cette page HTML peut embarquer elle-même du code Javascript (en
utilisant ici le framework Jquery). Ce code est alors exécuté sur le
navigateur quand le code HTML y est interprété.
Javascript permet notamment d'agir en fonction d'événements sur l'IHM et
peut communiquer avec le serveur en lui demandant des données (avec la
méthode GET) ou en lui en envoyant (c'est votre cas avec POST).
Grâce à cela, il est possible de modifier par exemple la page HTML sans
la régénérer (par exemple adapter dynamiquement des listes de formulaire
en fonctions de données qui viennent de changer dans le formulaire sans
l'envoyer). Il est possible de transmettre des données au serveur sans
envoyer le formulaire (c'est votre cas).

Amicalement, Vincent Verdon



Merci pour ces explications. Effectivement c'est plus clair comme ça.
Maintenant que l'urgence au boulot est passée, je vais creuser ça plus
tranquillement à la maison en tête à tête avec mon easyphp.
Didier.
Avatar
Vincent Verdon
Bonjour Didier,

Le 08/06/2012 22:16, Didier a écrit :

Je suis encore bien trop novice pour expliquer, mais en gros :
dans la page j'ai une liste de choix (select etc ...), avec un onChange
qui poinbt vers une fonction javacript qui fait appel à la librairie
jquery, et en paticulier je fais un $.post avec les paramètres qui vont
bien, et une fonction function(data) par laquelle je récupère ce que le
script php destinataire des données écrit via des echos.
Ce script de destination inscrira les données passée en POST dans une
base mysql, et renverra le code de réussite ou d'échec.
Donc, si j'ai bien compris, côté serveur du php génère une page avec du
javascript en utlisant la librairie jquery de j'ai déposée sur ce serveur.
Désolé pour autant d'imprécision.
Didier.




Il n'y a pas de problème, il faut bien commencer un jour !

Effectivement, PHP est un générateur de code HTML : il fabrique sur le
serveur le code HTML correspondant à la situation actuelle et à la page
demandée et l'envoie au client (le navigateur).
Cette page HTML peut embarquer elle-même du code Javascript (en
utilisant ici le framework Jquery). Ce code est alors exécuté sur le
navigateur quand le code HTML y est interprété.
Javascript permet notamment d'agir en fonction d'événements sur l'IHM et
peut communiquer avec le serveur en lui demandant des données (avec la
méthode GET) ou en lui en envoyant (c'est votre cas avec POST).
Grâce à cela, il est possible de modifier par exemple la page HTML sans
la régénérer (par exemple adapter dynamiquement des listes de formulaire
en fonctions de données qui viennent de changer dans le formulaire sans
l'envoyer). Il est possible de transmettre des données au serveur sans
envoyer le formulaire (c'est votre cas).

Amicalement, Vincent Verdon