Entree standard sur script PHP

Romain_cim Messages postés 11 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 4 février 2009 - 3 févr. 2009 à 18:11
Romain_cim Messages postés 11 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 4 février 2009 - 4 févr. 2009 à 13:22
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
 

8 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
3 févr. 2009 à 18:58
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>
0
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
3 févr. 2009 à 19:38
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 -
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
3 févr. 2009 à 19:53
@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().
0
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
3 févr. 2009 à 20:21
@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 -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Romain_cim Messages postés 11 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 4 février 2009
4 févr. 2009 à 11:08
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
 
0
Romain_cim Messages postés 11 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 4 février 2009
4 févr. 2009 à 12:39
@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??

 
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
4 févr. 2009 à 13:10
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).
0
Romain_cim Messages postés 11 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 4 février 2009
4 févr. 2009 à 13:22
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

 
0