<B> streams en php - PHP - Programmation
Marsh Posté le 29-08-2007 à 13:35:00
J'ai pas tout compris, mais ce qui est sûr c'est que tu vas pas pouvoir balancer un stream par http, donc t'es obligé de le recharger le stream si tu veux t'en servir sur deux "pages" différentes.
Marsh Posté le 29-08-2007 à 15:18:54
Si je comprend bien tu as :
- un programme N en ligne de commande qui affiche des données et qui en réclame d'autres petit à petit
- une page web qui lance le programme
- une page web qui fournis les données au programme et ce au goute à goute
Ce que tu veux, c'est que plusieurs pages web arrivent à dialoguer avec la même instance du programme (donc sans jamais le relancer) Désolé de te dire ça, mais je ne vois aucune solution permettant de faire ça en utilisant que du php.
La première solution auquel on pourrait penser serait de faire passer l'identifiant de ressource d'une page à l'autre. Le problème c'est que ça ne peut pas marcher vu que toutes les ressources sont fermé par php à chaque fin d'exécution d'une page.
La seconde solution serait de réussir à se brancher sur les entrés/sorties standard d'un programme déjà lancé (par la première page dans ton cas) mais à ma connaissance le php ne permet pas de faire ça (en plus tu es à distance donc c'est carrément impossible à ma connaissance sans passer par des programmes intermédiaires).
On en arrive donc à la troisième solution qui serait d'avoir sur le serveur distant un programme M capable de se connecter à la volé aux entrés/sorties standard du programme N (s'il est déjà lancé) afin de lui fournir la réponse suivante et d'avoir la suite des instructions. Le problème c'est qu'on risque alors de louper des infos voire de répondre à une mauvaise question (si le programme N à un timeout sur l'attente de réponse) Pour éviter ce problème, il faudrait faire un programme intermédiaire qui se place entre les programme M et N et qui reste connecté constamment au programme N
Avec l'avant dernière solution, on aurait donc :
n pages PHP => n flux SSH => n lancement du programme O => programme N (lancé une seule fois)
Comme tu l'imagines, dans les deux derniers cas, on est loin d'une solution qui soit intégralement en php.
PS : Les deux dernières ne sont valable que si le programme N n'est pas tué par le système d'exploitation quand php ferme la liaison ssl.
Marsh Posté le 29-08-2007 à 13:28:59
Je suis un jeune diplômé et je suis actuellement sur un sujet de mémoire pour réaliser un compilateur C à distance en utilisant un serveur ssh et php.
Pendant ma recherche j’ai tombé sur plusieurs de vous participations sur ssh et je serai très content si vous me donner un cout de main
Mon problème est le suivant :
Dans la première page1.php je doit exécuter mon programme C:
$stream = ssh2_exec($connection, $cmd);
Puis lire les résultats de l’exécution
$output= stream_get_contents($stream);
Tout juste après je doit demander à l’utilisateur de me fournir des données qui vont s’exécuter à la suite (si le prg C contient la fonction scanf)et qui utilise le même flux $stream(pour cela j’utilise une formulaire)
Donc je doit récupérer ces données à partir de la formulaire et les utiliser dans la page2.php :
fwrite($stream, "a\n" );
sleep(1);
$output1 = stream_get_contents($stream);
Le problème est que lorsque je passe de la première page à la deuxième je perds mon flux $stream
Il m’affiche :
Warning: fwrite(): supplied argument is not a valid stream resource
Bon si vous pouvez m’aider je serai très reconnaissant et merci pour tout