Entree standard sur script PHP

Signaler
Messages postés
11
Date d'inscription
lundi 24 mai 2004
Statut
Membre
Dernière intervention
4 février 2009
-
Messages postés
11
Date d'inscription
lundi 24 mai 2004
Statut
Membre
Dernière intervention
4 février 2009
-
Bonjour à tous,

J'ai developpé une API (qui est plus un web service en fait) qu'un de nos client utilise comme ceci : le client envoie une requete au format xml en ecrivant sur l'entree standard de mon script. Mon script lit la requete de cette mannière :
    $fp = fopen("php://input", 'r');
    while(false!==($line = fgets($fp)))
      $xml_request.=$line;
  }
Ensuite le script traite la demande et effecture un simple echo de la reponse.
Jusqu'ici tout va bien.

Je voudrais redevelopper le meme type d'application pour un autre client et je dois donc leur envoyer une doc leur indiquant comment communiquer avec notre appli. Le probleme c'est que je n'ai aucune idee de comment on fait pour parvenir a ecrire sur l'entree standard de mon script... J'ai bien essayé avec fsocken mais il envoie des paramètres POST ou GET.

Quelqu'un peut-il éclairer ma lanterne? Je commence a surchauffer

Merci d'avance
 
A voir également:

8 réponses

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

Pour écrire sur l'entrée standard il te suffit simplement de lancer le script avec une console, rien de compliqué.

Sinon juste une petite remarque, ouvrir php://input n'est pas recommandé, il est préférable d'utiliser la constante STDIN (pas besoin de faire un open dessus)<tt class="constant">.
</tt>
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Heu ... ça serait plutôt php://stdout non ? (je n'ai aucune idee de comment on fait pour parvenir a ecrire sur l'entree standard de mon script) ... menfin je comprends peut être à l'envers.
Tu devrais donner un peu plus d'infos sur la fonctionnalité de ton script et la manière dont la com se passe (protocole, etc ...), car là c'est un peu juste.

mais il envoie des paramètres POST ou GET
??? les sockets envoient ce que tu veux, non ?

Cordialement,

Kohntark -
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
@kohntark : non c'est bien l'entrée standard. Le but ici est que le script récupère ce qui est écrit dessus, d'où l'utilisation du fgets().
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
@TychoBrahe :
Je ne vais pas polémiquer mais il y a 2 manières de l'entendre, je prenais en compte "Je voudrais redevelopper le meme type d'application", "aucune idee de comment on fait pour parvenir a ecrire sur l'entree standard de mon script"

Romain nous dira ...

Bonne soirée,

Kohntark -
Messages postés
11
Date d'inscription
lundi 24 mai 2004
Statut
Membre
Dernière intervention
4 février 2009

Merci pour vos réponses.
@kohntark: Je ne veux pas de paramètres post ou get, c'est pour cette raison que fsocket ne me convient pas.
Je crois que je ferais mieux de réexpliquer mon problème:
En fait j'ai deja le serveur qui lit l'entrée standard (que je vais modifier pour utiliser STDIN, merci TychoBrahe) mais ce que je veux faire cette fois ci, c'est développer le client qui écrit sur l'entrée standard du serveur.
Dans la précédente appli, le client a été développé par une société cliente de la la mienne. J'ai développé le serveur en m'adaptant a leur demande. Aujourd'hui, comme ce processus fonctionne bien, nous voudrions le remettre en place pour une autre société cliente. Je dois donc fournir à cette nouvelle société une doc indiquant comment développer leur client. C'est ici que je coince car je n'arrive a développer un client qui écrive sur l'entrée standard du serveur.
@TychoBrahe : j'ai essayé ceci en ligne de commande sous unix:
cat requete.xml | php mon_serveur.php
dans mon_serveur.php je fais un echo de STDIN mais ca n'affiche que : Resource id #1
et avec fopen("php://input", 'r') et fget je ne recois rien.

J'espere que ma demande est plus claire, et merci encore a vous deux
 
Messages postés
11
Date d'inscription
lundi 24 mai 2004
Statut
Membre
Dernière intervention
4 février 2009

@TychoBrahe : je viens de comprendre qu'un echo de STDIN ne marche et qu'il faut utiliser fgets(STDIN) et alors ca fonctionne, je recupere ma requete dans mon serveur avec la methode en ligne de commande.

Ma question maintenant serait de savoir comment un script sur une machine differente peut ecrire sur l'entree standard de mon serveur??

 
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Pour écrire sur l'entrée standard tu peux tenter un fprintf(STDIN, "Message"), m'enfin c'est vraiment très porc et ne devrais fonctionner que si le client et le serveur se situent sur la même machine. Une solution serai, au lancement du logiciel serveur, de rediriger l'entrée standard de ce dernier sur un autre fichier dans lequel va écrire le client (vive les sockets).
Messages postés
11
Date d'inscription
lundi 24 mai 2004
Statut
Membre
Dernière intervention
4 février 2009

Merci TychoBrahe. Je crois que je vais réfléchir à une méthode complètement différente parce que celle ci n'a pas l'air de rentrer dans les usages standard.
Je n'osais pas contacter notre client (société) qui a développer le client (script) qui écrit sur l'entrée standard de mon serveur, pour ne pas nous discréditer vis a vis d'eux, mais je crois que je vais le faire pour savoir comment ils font parce que ca m'intrigue quand meme. Je posterai leur réponse si elle est satisfaisante.

En tout cas merci beaucoup