Programme interactif via SSH depuis PHP

Petit nouveau ! | 4 Messages

29 oct. 2009, 22:51

Bonjour !

Je dois exécuter un programme interactif en mode texte sur un serveur distant depuis un autre serveur (web). Je me connecte à partir du serveur web au serveur distant à l'aide des fonctions de la bibliothèque PHP: SSH2.
J'arrive à exécuter le programme après m'être authentifié, mais le problème, c'est que ce programme est interactif : il attend mes réponses à ses questions (avec des scanf). D'où mon problème : comment lui envoyer mes réponses (il lit sur l'entrée standard) ?

Note : Les deux serveurs (cible avec le programme en question, et web) sont sous Linux.

Merci de m'éclairer...

Eléphant du PHP | 217 Messages

30 oct. 2009, 15:55

Il te faut regarder du coté des fonctions stream Flux avec php

Petit nouveau ! | 4 Messages

30 oct. 2009, 17:57

Merci d'avoir répondu rapidement, je vais y jeter un oeil !

Petit nouveau ! | 4 Messages

04 nov. 2009, 23:01

En fait, je ne comprends pas bien comment utiliser un streamWrapper...
D'après la doc, la classe est définie de base dans PHP, donc il n'y a rien à installer en plus.
Pourtant, quand j'appelle streamWrapper::stream_read(32), j'obtiens une erreur "Fatal error: Class 'streamWrapper' not found". J'obtiens la même erreur lorsque j'essaye de créer une instance de streamWrapper.
Il y a donc une pièce manquante au puzzle... faut-il inclure (ou importer) la classe dans mon fichier .php avant de pouvoir l'utiliser ? Y a-t-il autre chose qui m'échappe ?

Toute aide serait la bienvenue.

ViPHP
ViPHP | 4674 Messages

05 nov. 2009, 11:09

Hey :-),

C'est normal d'avoir une erreur car streamWrapper n'existe pas, c'est un prototype. Ça aurait pu être une interface remarque …
En fait, c'est juste un mémo qui rassemble toutes les méthodes qui sont susceptibles d'être appelées sur un objet qui est enregistré comme stream wrapper.
Tu n'es pas obligé de tout implémenter (mais c'est préférable si tu veux éviter des erreurs, ça dépend de ton implémentation).

La documentation le précise bien d'ailleurs :
Note: This is NOT a real class, only a prototype of how a class defining its own protocol should be.
Édition : d'ailleurs, les stream wrappers n'ont pas de rapport avec ton problème. Pourquoi t'y intéresses-tu ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Petit nouveau ! | 4 Messages

05 nov. 2009, 15:27

Effectivement, je viens de résoudre mon problème. Il suffit de lire dans le flux avec fread() ou fgets(), et d'y écrire avec fwrite().

Je m'y intéressait car on m'a dit d'aller voir du côté des flux, et dans la doc des flux, je suis tombé sur des méthodes comme streamRead() qui me paraissaient adaptés.
Mais en fait, fgets() et fwrite() font très bien l'affaire.

Merci pour ces précisions sur les stream wrappers !

ViPHP
ViPHP | 4674 Messages

05 nov. 2009, 15:47

Le système de flux de PHP est une vraie merveille :-). Si tu mets le nez dedans, tu as du mal à en sortir ;-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).