OVH Cloud OVH Cloud

quelles solutions pour échanger des données entre deux sites

21 réponses
Avatar
J-F Portala
Bonjour,
je ne suis pas sûr d'interroger le bon newsgroup
mais je n'en voyais pas d'autres.

J'ai une petite application qui doit échanger des informations entre 2
sites.

A envoie un fichier à B. (le fichier est une liste d'articles créée
automatiquement en scannant des code barres)
B le décortique et envoie un email et un fichier à A. (le fichier est une
confirmation de commande des articles)

J'ai toujours travaillé sur des intranets en php et mysql, ce qui fait que
je ne suis pas à l'aise avec des échanges internet type mail ou upload.

La solution que je pense maitriser est de travailler avec un VPN entre A et
B. A dépose un fichier dans un dossier sur le site B, et une application
chez B va scruter ce dossier pour vérifier
l'existence d'un nouveau fichier, va ensuite le travailler pour renvoyer un
fichier de confirmation de commande chez A.
Cette solution que je n'ai pas validée me permet d'éviter de gérer un site
web, mais ce n'est peut être pas la plus simple.
Cela m'oblige à créer je crois 2 VPN (A->B et B->A).
Le problème est que si dans l'avenir, il y a plusieurs A, cela risque de
devenir compliqué.

L'autre solution plus idéale serait de passer par un site web:
A envoie le fichier ou ajoute directement la liste des articles dans la base
de données hebergées sur le site web de B.
B crée la confirmation et envoie par email cette confirmation.à A et à B
pour gestion de la commande.

Mes questions sont multiples:
- quelle est à votre avis la meilleure solution technique?. Ce n'est pas une
gestion de sites marchands, c'est juste pour réapprovsionner certains
articles, d'où la simplicité des informations échangées.

- dans le cas du site web, est ce que l'on peut automatiquement se connecter
à un site (ou une base de données hébergées sur un site) et y déposer des
informations (je connais le PHP et C++)
- comment est ce que l'on peut déclencher une action lorsque la liste est
déposée sur le site
- est ce que l'on démarre une appli php qui va décortiquer puis
envoyer le mail avec le fichier joint
- est ce que l'on peut avoir une appli php (ou autre) qui scrute la
base de données en permanence pour vérifier s'il y a des ajouts.

Mes questions sont basiques mais là je me sens trés léger sur la partie web
(internet).

Merci de vos opinions et de votre aide

Jeff

10 réponses

1 2 3
Avatar
J-F Portala
Bonjour et encore merci de votre aide.

Je travaille en C++ et j'ai pu vérifiee que je pouvais ajouter des
enregistrements directement dans une base de données hébergés par un site.
A la fin des enregistrements si tout s'est bien passé, il me suffirait de
lancer la page web de traitement des données.
Je dois pouvoir lancer le navigateur avec une page cible en argument mais
cela suppose que l'interface du navigateur va s'afficher, ce qui pose
problème
car cela se fait automatiquement.
J'arrive lancer le process mais pas le fermer.

Jeff
Avatar
Mickaël Wolff
On 15/03/11 03:35, Anne G wrote:
Merci Denis !
J'imaginais pas que ça puisse exister :)


Hmmm… il t'a juste donné l'adresse du groupe usenet dans lequel nous
discutons actuellement ;)

Ceci dit, je pense que J-F parlait plutôt des listes de diffusion
accessibles via Usenet <http://php.net/manual/fr/faq.mailinglist.php> ou
d'un des nombreux forum web tels que lephpfacile.com, nexen.net ou
encore PHPFrance.
Avatar
Jean-Francois Ortolo
Le 15/03/2011 12:02, J-F Portala a écrit :
Bonjour et encore merci de votre aide.

Je travaille en C++ et j'ai pu vérifiee que je pouvais ajouter des
enregistrements directement dans une base de données hébergés par un site.
A la fin des enregistrements si tout s'est bien passé, il me suffirait de
lancer la page web de traitement des données.
Je dois pouvoir lancer le navigateur avec une page cible en argument mais
cela suppose que l'interface du navigateur va s'afficher, ce qui pose
problème
car cela se fait automatiquement.
J'arrive lancer le process mais pas le fermer.

Jeff






Bonjour Monsieur

Si le premier processus ( script ) php, est lancé automatiquement en
langage php à partir du site A ( site web ), c'est qu'il est déclenché.

Il peut à la rigueur, se connecter à distance à un base de données
MySQL située sur le site web B, et recevoir théoriquement, un résultat,
qui parviendra au site A, qui pourra automatiquement en retour,
déclencher un script php sur le site B, qui fera le traitement de
données souhaité sur le site B.

L'ensemble du processus, ne nécessite que le déclenchement du premier
script php, situé sur le site A.

Comme son déclenchement est supposé possible, le problème n'est-il
pas résolu ?

Celà dit, je ne sais pas comment, en connexion par php à une base de
données à distance, que ce soit par des fonction mysql_*() ou
l'interface PDO de MySQL en php, il est possible de savoir, si par
exemple, une instruction MySQL envoyé à la base, est correctement
effectuée, ou non.

Je suppose, que les contrôles d'erreur à l'exécution d'instructions
MySQL de ces deux solution ( fonctions mysql_*() , qui vont devenir
obsolètes dans pas longtemps, ou interface PDO, préférable ), ce s
contrôles d'erreur, sont probablement identiques, que la base de données
soit local ou distante.

Dnas ce cas, aucune difficulté, vous programmez comme d'habitude, ces
deux scripts php, celui du site A, et celui du site B, et vogue la
galère... ;)

Bien à vous.

Amicalement.

Jean-François Ortolo

--
Visitez mon site gratuit donnant des Statistiques,
des Pronostics et des Historiques Graphiques
sur les Courses de Chevaux:
http://www.pronostics-courses.fr
Avatar
Denis Beauregard
Le Tue, 15 Mar 2011 14:20:31 +0100, Jean-Francois Ortolo
écrivait dans
fr.comp.infosystemes.www.auteurs:

Celà dit, je ne sais pas comment, en connexion par php à une base de
données à distance, que ce soit par des fonction mysql_*() ou
l'interface PDO de MySQL en php, il est possible de savoir, si par
exemple, une instruction MySQL envoyé à la base, est correctement
effectuée, ou non.



On peut utiliser la librairie curl. On construit une URL et
celle-ci donne comme résultat un code d'erreur. Par exemple,
0 si réussite, 1 si telle erreur, 2 si telle autre, au lieu
du tradition <html><head><body>....

Avec PHP 4 et 5, on peut aussi utiliser get_meta_tags


Denis
Avatar
Anne G
Le 15/03/11 04:51, Mickaël Wolff a écrit :
On 15/03/11 03:35, Anne G wrote:
Merci Denis !
J'imaginais pas que ça puisse exister :)


Hmmm… il t'a juste donné l'adresse du groupe usenet dans lequel nous
discutons actuellement ;)



Ben non.
On discute sur f.c.i.auteurs, il m'a donné le nom du groupe f.c.l.php !

Ceci dit, je pense que J-F parlait plutôt des listes de diffusion
accessibles via Usenet <http://php.net/manual/fr/faq.mailinglist.php> ou
d'un des nombreux forum web tels que lephpfacile.com, nexen.net ou
encore PHPFrance.



Ouais, mais moi, je suis bien contente de trouver un groupe Usenet sur
le PHP.
Avatar
Pascal Poncet
Le 15/03/2011 04:35, Anne G a écrit :
Le 14/03/11 20:11, Denis Beauregard a écrit :
fr.comp.lang.php



Merci Denis !
J'imaginais pas que ça puisse exister :)



Je ne sais pas ce que tu utilises comme lecteur de news, mais je crois
que la plupart propose une sorte d'arborescence lors de l'abonnement à
un groupe, ou une liste avec un filtrage sur les premiers caractères saisis.
Je te conseille donc de naviguer, ou de filtrer, avec la racine
"fr.comp.lang." et tu découvriras, si ce n'est déjà fait, d'autres
langages traités.
La racine "comp.lang." est intéressante aussi, pour les anglophones,
mais souvent surchargée.


--
Cordialement,
Pascal
Avatar
Jean-Francois Ortolo
Le 15/03/2011 15:04, Denis Beauregard a écrit :
Le Tue, 15 Mar 2011 14:20:31 +0100, Jean-Francois Ortolo
écrivait dans
fr.comp.infosystemes.www.auteurs:

Celà dit, je ne sais pas comment, en connexion par php à une base de
données à distance, que ce soit par des fonction mysql_*() ou
l'interface PDO de MySQL en php, il est possible de savoir, si par
exemple, une instruction MySQL envoyé à la base, est correctement
effectuée, ou non.



On peut utiliser la librairie curl. On construit une URL et
celle-ci donne comme résultat un code d'erreur. Par exemple,
0 si réussite, 1 si telle erreur, 2 si telle autre, au lieu
du tradition<html><head><body>....

Avec PHP 4 et 5, on peut aussi utiliser get_meta_tags


Denis





D'accord

Dans ce cas, celà veut dire, que vous accédez à la base de données
MySQL à partir du site web A, par l'intermédiaire du script sur le site
web B, que vous lancez avec curl. Possible.

Mais dans ce cas, comment les données transmises par le site A au
site B, pourront-elles être transmises ?

Certainement pas par l'intermédiaire de paramètres de l'url lancée
sur le site B, même en POST ( POST permet plus de données que GET de
toute façon ) ?

A moins de simuler en curl une connexion sur le port par défaut de la
base de données ( autre que HTTP = 80 ), mais là c'est foireux, pas sûr
que ça marche.

Il vaut beaucoup mieux, se connecter ( utiliser les fonctions PDO par
exemple, l'équivalent de mysql en ligne de commande ) à distance, du
site web A, à la base de données située sur le site web B.

A ce moment-là, il y a une vraie connexion TCP/IP de A vers B, et les
données circulent sans limitation de longueur, à part les timeout, qu'il
est facile de régler, théoriquement, avec les fonctions de l'interface
PDO ( ou des fonctions type mysql_*(), qui ne sont pas recommandées,
bien qu'elles fassent la même chose que l'interface PDO, mis ces
fonctions mysql*() deviendront obsolètes dans peu de temps, avec
l'évolution des versions de php ), sur le site web B.

Il faut toujours tenir compte de l'évolution future d'un programme,
en fonction de celle de l'environnement dans lequel il évolue.

D'où, conclusion : Il vaut mieux une connexion à distance vers un
serveur mysqld ( serveur MySQL, port TCP/IP par défaut je ne sais plus
lequel ), qui est une vraie connexion qui dure, à une fausse connexion
HTTP, qui n'est pas une vraie connexion, et ne permet pas du tout, de
transmettre beaucoup de données.

Elémentaire, mon cher Watson. ;)

Bien à vous.

Amicalement.

Jean-François Ortolo

--
Visitez mon site gratuit donnant des Statistiques,
des Pronostics et des Historiques Graphiques
sur les Courses de Chevaux:
http://www.pronostics-courses.fr
Avatar
Denis Beauregard
Ma réponse est intercalée dans les messages précédents.

Le Tue, 15 Mar 2011 18:00:40 +0100, Jean-Francois Ortolo
écrivait dans
fr.comp.infosystemes.www.auteurs:

Le 15/03/2011 15:04, Denis Beauregard a écrit :
Le Tue, 15 Mar 2011 14:20:31 +0100, Jean-Francois Ortolo
écrivait dans
fr.comp.infosystemes.www.auteurs:

Celà dit, je ne sais pas comment, en connexion par php à une base de
données à distance, que ce soit par des fonction mysql_*() ou
l'interface PDO de MySQL en php, il est possible de savoir, si par
exemple, une instruction MySQL envoyé à la base, est correctement
effectuée, ou non.



On peut utiliser la librairie curl. On construit une URL et
celle-ci donne comme résultat un code d'erreur. Par exemple,
0 si réussite, 1 si telle erreur, 2 si telle autre, au lieu
du tradition<html><head><body>....

Avec PHP 4 et 5, on peut aussi utiliser get_meta_tags


Denis





D'accord

Dans ce cas, celà veut dire, que vous accédez à la base de données
MySQL à partir du site web A, par l'intermédiaire du script sur le site
web B, que vous lancez avec curl. Possible.

Mais dans ce cas, comment les données transmises par le site A au
site B, pourront-elles être transmises ?



Dans l'URL, tout simplement !

Certainement pas par l'intermédiaire de paramètres de l'url lancée
sur le site B, même en POST ( POST permet plus de données que GET de
toute façon ) ?



Pourquoi pas dans un GET ? Et si la liste est trop longue, en 2 GET
ou plus. D'après l'énoncé du problème, j'ai l'impression que l'URL
sera courte (numéro d'item et quantité à soustraire de la BDD).

A moins de simuler en curl une connexion sur le port par défaut de la
base de données ( autre que HTTP = 80 ), mais là c'est foireux, pas sûr
que ça marche.



Dans mon code (qui n'est pas terminé), j'ai quelque chose comme ceci:

$lien = "http://www.exemple.com/?li34-2345-3456-3455-4637
$ch = curl_init ();
echo "<h1>[1] ".curl_error ($ch)."</h1>n";

curl_setopt($ch, CURLOPT_URL, $lien);
echo "<h1>[2] ".curl_error ($ch)."</h1>n";

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
echo "<h1>[3] ".curl_error ($ch)."</h1>n";

$output = curl_exec($ch);
echo "<h1>[4] ".curl_error ($ch)."</h1>n";

echo $output;

curl_close($ch);

Il vaut beaucoup mieux, se connecter ( utiliser les fonctions PDO par
exemple, l'équivalent de mysql en ligne de commande ) à distance, du
site web A, à la base de données située sur le site web B.



Il y a plusieurs façons de faire le travail. Dans l'application que
je suis en train d'écrire, je n'ai qu'à transférer une session d'un
site à un autre, donc c'est assez court comme URL.

A ce moment-là, il y a une vraie connexion TCP/IP de A vers B, et les
données circulent sans limitation de longueur, à part les timeout, qu'il
est facile de régler, théoriquement, avec les fonctions de l'interface
PDO ( ou des fonctions type mysql_*(), qui ne sont pas recommandées,
bien qu'elles fassent la même chose que l'interface PDO, mis ces
fonctions mysql*() deviendront obsolètes dans peu de temps, avec
l'évolution des versions de php ), sur le site web B.

Il faut toujours tenir compte de l'évolution future d'un programme,
en fonction de celle de l'environnement dans lequel il évolue.

D'où, conclusion : Il vaut mieux une connexion à distance vers un
serveur mysqld ( serveur MySQL, port TCP/IP par défaut je ne sais plus
lequel ), qui est une vraie connexion qui dure, à une fausse connexion
HTTP, qui n'est pas une vraie connexion, et ne permet pas du tout, de
transmettre beaucoup de données.



C'est à celui qui a posé la question initiale de choisir quelle
solution il préfère. Souvent, un critère de sélection important est
celui de ce que l'on connaît déjà (ou avec quoi on est familier) avant
d'essayer d'autres solutions.

Ceci dit, s'il faut travailler avec des sockets et tout le tralala
alors qu'on est habitué à du code plus simple, on risque de perdre
beaucoup de temps par rapport à d'autres solutions qui reposent sur
quelques fonctions plus simples à utiliser.

Elémentaire, mon cher Watson. ;)

Bien à vous.

Amicalement.

Jean-François Ortolo




Denis
Avatar
Jean-Francois Ortolo
Le 15/03/2011 18:18, Denis Beauregard a écrit :

C'est à celui qui a posé la question initiale de choisir quelle
solution il préfère. Souvent, un critère de sélection important est
celui de ce que l'on connaît déjà (ou avec quoi on est familier) avant
d'essayer d'autres solutions.

Ceci dit, s'il faut travailler avec des sockets et tout le tralala
alors qu'on est habitué à du code plus simple, on risque de perdre
beaucoup de temps par rapport à d'autres solutions qui reposent sur
quelques fonctions plus simples à utiliser.





Bonjour Monsieur

C'est sûr, que pour lancer à partir d'un script php, une url avec des
paramètres GET, il vaut mieux utiliser curl que les fonctions type
fsockopen(), curl est plus moderne. ;)

Je ne savais pas que le nombre et la longueur des paramètres, étaient
faibles.

Je pensais, que les instructions MySQL appelées, seraient des
fonctions d'insert aussi, pas seulement des update ou des select. Donc
je supposais qu'il y aurait, un gros paquet de paramètres. ;)

C'est sûr, que ta méthode est beaucoup plus simple, et conforme au
paradigme client-serveur, ou le client est très léger, et le serveur
fait tout le traitement.

Ta méthode est une bonne méthode. ;)

Bien à vous.

Amicalement.

Jean-François Ortolo

--
Visitez mon site gratuit donnant des Statistiques,
des Pronostics et des Historiques Graphiques
sur les Courses de Chevaux:
http://www.pronostics-courses.fr
Avatar
Anne G
Le 15/03/11 09:49, Pascal Poncet a écrit :
Le 15/03/2011 04:35, Anne G a écrit :
Le 14/03/11 20:11, Denis Beauregard a écrit :
fr.comp.lang.php



Merci Denis !
J'imaginais pas que ça puisse exister :)



Je ne sais pas ce que tu utilises comme lecteur de news, mais je crois
que la plupart propose une sorte d'arborescence lors de l'abonnement à
un groupe, ou une liste avec un filtrage sur les premiers caractères
saisis.
Je te conseille donc de naviguer, ou de filtrer, avec la racine
"fr.comp.lang." et tu découvriras, si ce n'est déjà fait, d'autres
langages traités.
La racine "comp.lang." est intéressante aussi, pour les anglophones,
mais souvent surchargée.



Je regarde souvent ce que mon serveur ne news me propose comme
abonnements, mais je n'avais jamais pensé que le choix était si pointu.
1 2 3