Discussion:
rapatrier des donnees PHP vers un scri pt Shell
(trop ancien pour répondre)
Jean-Francois Ortolo
2007-09-27 10:50:58 UTC
Permalink
Bonjour

Je dois faire un traitement répétitif, c'est-à-dire lancer un script
PHP avec un paramètre de date, à partir d'un script en Bourne Shell,
répétitivement.

S'il se passe une erreur à l'exécution du script PHP, le script Shell
doit en être averti, et s'arrêter en donnant un message d'erreur ( ou
autre chose, par exemple un code de retour spécifique ).

Je sais que je peux déclencher facilement un script PHP situé sur un
serveur web, à distance, avec la commande curl. Mais comment faire pour
que le script PHP puisse transmettre des données ( en très faible
quantité ) au script Shell ?

Un script PHP peut fournir des données, soit par des instructions
d'affichage telles que echo par exemple, soit donner un code de retour
par la command exit.

Le script PHP devrait pouvoir transmettre une date en
${an}${mois}${jour} , soit une chaîne de caractère de 6 chiffres, ou
bien une autre chaîne de caractère ( "OK" si correct, rien sinon ).

Comment transmettre ces deux types de données, au script Shell appelant ?


Pour contourner ce problème, j'ai pensé à une autre solution:

J'ai pensé à faire une boucle intégrée au script PHP appelé, qui se
lancerait de nouveau lui-même à la fin de son exécution, avec la
librairie Curl. Est-ce que vous pensez que ce serait faisable, compte
tenu du fait que la commande curl, n'admet au plus que 50 redirections ?

Dans ce cas de figure, chaque nouveau script appelé avec un nouveau
paramètre de date, serait lancé avec une isntruction curl appartenant à
au script précédent, qui se terminerait donc immédiatement. Est-ce que
la limite de 50 redirections, s'applique encore dans ce cas ?

Merci beaucoup de vos réponses.

Bien à vous.

Amicalement.

Jean-François Ortolo
--
Visitez mon site gratuit donnant des Statistiques
et des Historiques Graphiques sur les Courses de Chevaux:
http://www.ortolojf-courses.com
Olivier Miakinen
2007-09-27 11:03:16 UTC
Permalink
Post by Jean-Francois Ortolo
Je dois faire un traitement répétitif, c'est-à-dire lancer un script
PHP avec un paramètre de date, à partir d'un script en Bourne Shell,
répétitivement.
S'il se passe une erreur à l'exécution du script PHP, le script Shell
doit en être averti, et s'arrêter en donnant un message d'erreur ( ou
autre chose, par exemple un code de retour spécifique ).
Je sais que je peux déclencher facilement un script PHP situé sur un
serveur web, à distance, avec la commande curl. Mais comment faire pour
que le script PHP puisse transmettre des données ( en très faible
quantité ) au script Shell ?
Un script PHP peut fournir des données, soit par des instructions
d'affichage telles que echo par exemple, soit donner un code de retour
par la command exit.
Je ne sais pas si on peut récupérer le code de retour de la commande
exit, mais tu peux certainement récupérer tout ce qui est envoyé par
echo, ainsi que le code de retour HTTP que tu peux transmettre par une
instruction header().

Et si Curl ne permet pas de le faire simplement, ce qui m'étonnerait
beaucoup, tu peux aussi essayer avec Wget.
Mickael Wolff
2007-09-27 13:06:12 UTC
Permalink
Post by Olivier Miakinen
Je ne sais pas si on peut récupérer le code de retour de la commande
exit,
Le commentaire de Roumen Semov <http://fr2.php.net/exit> est
instructif à ce sujet. Bien sûr, il faut savoir récupérer le **status**
donné par un fils mort. <man bash>
Post by Olivier Miakinen
mais tu peux certainement récupérer tout ce qui est envoyé par
echo, ainsi que le code de retour HTTP que tu peux transmettre par une
instruction header().
header ? Dans ce qui semble être une application CLI ?

Une solution élégante serait d'utiliser une variable d'environnement,
s'il y a besoin de fournir une information sous forme de chaine
<http://fr2.php.net/manual/fr/reserved.variables.php#reserved.variables.environment>.

Note au modérateur : désolé pour l'UTF.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Olivier Miakinen
2007-09-27 13:36:29 UTC
Permalink
Post by Mickael Wolff
Post by Olivier Miakinen
Je ne sais pas si on peut récupérer le code de retour de la commande
exit,
Le commentaire de Roumen Semov <http://fr2.php.net/exit> est
instructif à ce sujet. Bien sûr, il faut savoir récupérer le **status**
donné par un fils mort. <man bash>
Sauf que le script PHP, en mourant, ne transmet pas son status dans la
réponse HTTP transmise via Curl.
Post by Mickael Wolff
Post by Olivier Miakinen
mais tu peux certainement récupérer tout ce qui est envoyé par
echo, ainsi que le code de retour HTTP que tu peux transmettre par une
instruction header().
header ? Dans ce qui semble être une application CLI ?
Si « CLI » veut dire « sur la même machine, par fork/exec », alors ça ne
me semble pas du tout être le cas, bien au contraire :

<cit.>
Je sais que je peux déclencher facilement un script PHP situé sur un
serveur web, à distance, avec la commande curl. Mais comment faire pour
que le script PHP puisse transmettre des données ( en très faible
quantité ) au script Shell ?
</cit.>
Mickael Wolff
2007-09-27 17:09:18 UTC
Permalink
Post by Olivier Miakinen
Sauf que le script PHP, en mourant, ne transmet pas son status dans la
réponse HTTP transmise via Curl.
Ben non, il transmet au processus père.
Post by Olivier Miakinen
Post by Mickael Wolff
header ? Dans ce qui semble être une application CLI ?
Si « CLI » veut dire « sur la même machine,
Command Line Interface. Tu te souviens pas, ton prmier programme en C
était en CLI :-D Non :-o ?
Post by Olivier Miakinen
par fork/exec », alors ça ne
Ben si :)
Post by Olivier Miakinen
<cit.>
Je sais que je peux déclencher facilement un script PHP situé sur un
serveur web, à distance, avec la commande curl. Mais comment faire pour
que le script PHP puisse transmettre des données ( en très faible
quantité ) au script Shell ?
</cit.>
Oui, comment faire pour que le script PHP transmette le code retour et
les donnes au shell déclenché par le Cron :) Mais c'est vrai que sa
question laisse trop lieu à interprétation.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Olivier Miakinen
2007-09-27 17:33:29 UTC
Permalink
Post by Mickael Wolff
Post by Olivier Miakinen
Si « CLI » veut dire « sur la même machine,
Command Line Interface. Tu te souviens pas, ton prmier programme en C
était en CLI :-D Non :-o ?
Pas seulement le premier. Le seul programme en C auquel j'ai contribué
qui n'était pas lancé en ligne de commande était initialement développé
par quelqu'un d'autre.
Post by Mickael Wolff
[...] comment faire pour que le script PHP transmette le code retour et
les donnes au shell déclenché par le Cron :) Mais c'est vrai que sa
question laisse trop lieu à interprétation.
Personnellement j'ai lu « curl » dans la question et pas « cron ».
Mickael Wolff
2007-09-28 09:25:28 UTC
Permalink
Post by Olivier Miakinen
Post by Mickael Wolff
[...] comment faire pour que le script PHP transmette le code retour et
les donnes au shell déclenché par le Cron :) Mais c'est vrai que sa
question laisse trop lieu à interprétation.
Personnellement j'ai lu « curl » dans la question et pas « cron ».
Oui, j'ai extrapoler. Mais je n'avais pas tord. En fait, la
problématique était encore plus tordue que ce que je pensais ;) J'étais
parti sur le fait que Jean-François ne voulait pas utiliser un
équivalent à webcron (déduit du fait qu'il parlait de Curl), mais qu'il
voulait bien lancer un batch à l'aide d'un shell lancé par un cron
(sinon, quel intérêt ?).

Mais j'avoue, j'extrapole un peu trop loin parfois.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Marc
2007-09-27 13:36:29 UTC
Permalink
Post by Jean-Francois Ortolo
Je sais que je peux déclencher facilement un script PHP situé sur un
serveur web, à distance, avec la commande curl. Mais comment faire pour
que le script PHP puisse transmettre des données ( en très faible
quantité ) au script Shell ?
et pourquoi pas un script php en ligne de commande ?

php -q script.php

ca marche tres bien sur toute bonne machine unix.
Jean-Francois Ortolo
2007-09-27 17:09:19 UTC
Permalink
Bonjour

Je répond à toutes les réponses qui m'ont été faites.

Non, ce n'est pas du traitement CLI, mais l'utilisation de la
commande curl ( ou /usr/bin/curl , ou /usr/local/bin/curl , suivant le
cas ), avec une url http en paramètre.

A la rigueur, je n'ai pas besoin d'envoyer aucun paramètre au script
PHP déclenché à distance. Par contre, j'ai absolument besoin de
récupérer une chaîne de caractère en réponse, cette réponse donc (
d'après Monsieur Miakinen ), peut être envoyé par le script PHP, avec la
commande echo lancée par le script PHP.

Il faut bien voir, que cette commande curl ( je ne dispose pas de
wget sur l'environnement cible ), est lancée à partir d'un script en
Bourne Shell ( bash ), et que la chaîne de caractères qu'elle doit
retourner ( par le script PHP ), doit faire l'objet d'un traitement
automatique.

Mais... Comment récupérer dans un script Shell, une chaîne de
caractère, rendue par ce script PHP avec une commande echo ?

C'est toute la question.

Merci beaucoup de votre réponse.

Bien à vous.

Amicalement.

Jean-François Ortolo
--
Visitez mon site gratuit donnant des Statistiques
et des Historiques Graphiques sur les Courses de Chevaux:
http://www.ortolojf-courses.com
Olivier Miakinen
2007-09-27 17:33:29 UTC
Permalink
[...] d'après Monsieur Miakinen [...]
Bon, je me suis habitué à ce que tu vouvoies tout le monde tandis
que je tutoie tout le monde, mais de grâce ne mets pas de majuscule
à « monsieur » quand ce n'est pas un « vocatif » (c.-à-d. un entête
de lettre par exemple).
Il faut bien voir, que cette commande curl ( je ne dispose pas de
wget sur l'environnement cible ), est lancée à partir d'un script en
Bourne Shell ( bash ), et que la chaîne de caractères qu'elle doit
retourner ( par le script PHP ), doit faire l'objet d'un traitement
automatique.
Mais... Comment récupérer dans un script Shell, une chaîne de
caractère, rendue par ce script PHP avec une commande echo ?
C'est toute la question.
À mon humble avis, cette question n'a strictement rien à voir avec PHP.
Par ailleurs, sans lire la doc, j'imagine que le résultat est envoyé sur
la sortie standard de la commande curl, et donc que tu pourrais faire un
truc de ce genre :

resultat=`curl ... (paramètres) ...`

Essaye de lire ceci :
http://www.hmug.org/man/1/curl.php

Et si tu ne trouves rien, pose la question dans fr.comp.os.unix.
Jean-Francois Ortolo
2007-09-27 19:03:03 UTC
Permalink
Post by Olivier Miakinen
À mon humble avis, cette question n'a strictement rien à voir avec PHP.
Par ailleurs, sans lire la doc, j'imagine que le résultat est envoyé sur
la sortie standard de la commande curl, et donc que tu pourrais faire un
resultat=`curl ... (paramètres) ...`
Génial

Merci beaucoup monsieur.

Vous me tirez une fameuse épine du pied.

Je vais pouvoir faire un traitement quasi batch automatique, avec
traitement d'erreurs.

Et le dirlo de mon site partenaire, qui veut un programme calculant
et mettant à jour automatiquement les statistiques sur les pronostics de
son site ( de turf ), va être content.

Cette méthode me permettra de faire ce traitement en mode ultra
sécurisé, plus de problèmes par suite de dépassement de la limite de
temps imposée pour les scripts PHP.

Super.

Merci beaucoup.

Bien à vous.

Amicalement.

Jean-François Ortolo
--
Visitez mon site gratuit donnant des Statistiques
et des Historiques Graphiques sur les Courses de Chevaux:
http://www.ortolojf-courses.com
Continuer la lecture sur narkive:
Loading...