Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
716 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  sequencement socket lié a un formulaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sequencement socket lié a un formulaire

n°1661297
fattouch_s​quall
Posté le 20-12-2007 à 16:07:09  profilanswer
 

j'utilise une classe pr faire faire un connection telnet mais j'ai un probleme, je veu créer un formulaire avec 2champs mais on dirait que ça marche pas coté séquencement des information, mais si j'utilise pas le formulaire ça marche.
voici le code sans formulaire:

Code :
  1. $hostname = "192.168.2.1";
  2. $tn = new telnet($hostname,23);
  3. sleep(2);
  4. echo $tn->read_till("> " );
  5. $tn->write("sh int" );
  6. echo $tn->read_till("> " );
  7. $tn->write("sh conf" );
  8. echo $tn->read_till("> " );
  9. echo $tn->close();


celui la ça marche impécable mais c'est pas pratique pour mettre a chaque fois la commande de façon statique et le deuxieme aussi marche mais pas de façon a lire les données d'une façon continue de la socket(on dirait qu'il réinitialise la socket parès chaque submit)

Code :
  1. $loginprompt='>'
  2. $hostname = "192.168.2.1";
  3. $tn = new telnet($hostname,23);
  4. if(isset($_POST['command']) && !empty($_POST['command']))
  5. {
  6. $tn->write($_POST['command']."\r\n" );
  7. sleep(2);
  8.       if (($_POST['command']=='enable') || ($_POST['command']=='en'))
  9.        {
  10.    $loginprompt="#";
  11.    $tn->write($mdp);
  12.            sleep(2);
  13.  
  14.        } 
  15. $resultat.=tn->lire_juska($loginprompt);
  16. sleep(2);
  17. }
  18. $_SESSION['resultat'].=$resultat;
  19. ?>
  20. <form name="saisie" method="post" action="<?php $PHP_SELF ?>">
  21. <input type="text" name="command" size="60">
  22. <textarea cols="80" rows="20" name="result" style="overflow:visible" readonly="readonly" id="area"><?php echo $_SESSION['resultat']; ?></textarea>
  23. </form>


je bloque vraiment svp un peu d'aide :pfff:

mood
Publicité
Posté le 20-12-2007 à 16:07:09  profilanswer
 

n°1661321
soju
One shot !
Posté le 20-12-2007 à 16:39:23  profilanswer
 

pas très clair tout ça, et elle sort d'où cette classe telnet ??

fattouch_squall a écrit :

(on dirait qu'il réinitialise la socket parès chaque submit)

normal si tu n'utilises pas de connexion persistante

n°1661333
fattouch_s​quall
Posté le 20-12-2007 à 16:56:42  profilanswer
 

Code :
  1. class Telnet {
  2.         var $sock = NULL;
  3.         function telnet($host,$port) {
  4.         $this->sock = fsockopen($host,$port);
  5.                 socket_set_timeout($this->sock,2,0);
  6.         }
  7.     function close() {
  8.         if ($this->sock)
  9.             fclose($this->sock);
  10.         $this->sock = NULL;
  11.         }
  12.     function write($buffer) {
  13.                 $buffer = str_replace(chr(255),chr(255).chr(255),$buffer);
  14.         fwrite($this->sock,$buffer);
  15.         }
  16.         function getc() {
  17.                 return fgetc($this->sock);
  18.         }
  19.     function read_till($what) {
  20.         $buf = '';
  21.                 while (1) {
  22.                         $IAC = chr(255);
  23.                         $DONT = chr(254);
  24.                         $DO = chr(253);
  25.                         $WONT = chr(252);
  26.                         $WILL = chr(251);
  27.                         $theNULL = chr(0);
  28.                         $c = $this->getc();
  29.                         if ($c === false)
  30.                           return $buf;
  31.                         if ($c == $theNULL) {
  32.                                 continue;
  33.                         }
  34.                         if ($c == "\021" ) {
  35.                                 continue;
  36.                         }
  37.                         if ($c != $IAC) {
  38.                                 $buf .= $c;
  39.                                 if ($what == (substr($buf,strlen($buf)-strlen($what)))) {
  40.                                         return $buf;
  41.                                 } else {
  42.                                         continue;
  43.                                 }
  44.                         }
  45.                         $c = $this->getc();
  46.                         if ($c == $IAC) {
  47.                                 $buf .= $c;
  48.                         } else if (($c == $DO) || ($c == $DONT)) {
  49.                                 $opt = $this->getc();
  50.                         // echo "we wont ".ord($opt)."\n";
  51.                                 fwrite($this->sock,$IAC.$WONT.$opt);
  52.                         } elseif (($c == $WILL) || ($c == $WONT)) {
  53.                                 $opt = $this->getc();
  54.                         // echo "we dont ".ord($opt)."\n";
  55.                                 fwrite($this->sock,$IAC.$DONT.$opt);
  56.                         } else {
  57.                         // echo "where are we? c=".ord($c)."\n";
  58.                         }
  59.                 }
  60.         }
  61. }


voici la classe comment je fait pour etablir une connexion persistante pour le formulaire?


Message édité par fattouch_squall le 20-12-2007 à 17:25:04
n°1661343
omega2
Posté le 20-12-2007 à 17:30:25  profilanswer
 

Je résume :
1) t'as une page web avec un formulaire
2) t'as un script qui ouvre une connexion telnet et fait suivre ce qui est demandé
3) tu constates que la connexion telnet se coupe à chaque fois et que le script en ouvre une nouvelle à chaque fois que tu veux faire quelque chose.
 
Je te rassure, c'est un comportement qui est tout à fait logique. Les sites web ne sont pas des logiciels a connexion persistantes. Entre chaque demande de page, c'est une nouvelle connexion qui est créé et à chaque demande de page, c'est une nouvelle instance des scripts qui est exécuté.
 
Au niveau de php, ce qui se passe, c'est qu'à chaque fois que tu valides ton formulaire, tu demandes au serveur d'exécuter ton script php. Ce script ouvre une connexion avec le serveur telnet, ensuite il fait suivre ce que tu as demandé, t'affiche le résultat et se termine. Quand il se termine, le programme php fait le grand ménage et ferme toutes les ressources (fichiers, connexion réseaux, ...) qui ont été ouverte mais qui n'ont pas été fermé explicitement. La connexion au serveur telnet est donc tué à chaque fois (de toute manière, elle n'aurait pas pu être réutilisé plus tard)
 
La seule manière que t'as de contourner ça, c'est d'ouvrir une session php pour y stocker la liste des ordres déjà demandé jusqu'à présent et de les réexécuter à chaque fois pour retomber (s'il n'y a pas eu de changement sur le serveur) dans l'état voulut et que la nouvelle commande fasse ce qu'on voulait.
 
PS : En l'espace de 15 jours, t'es le second à avoir exactement ce problème là et tous les deux c'est pour une connexion telnet. Vous êtes dans la même classe et c'est votre projet à rendre pour bientôt?

n°1661353
fattouch_s​quall
Posté le 20-12-2007 à 17:37:55  profilanswer
 

j'ai essayé en changeant la variable $tn par $_SESSION['telnet'] et ça marche pas, je doit faire quoi en plus de ça??

n°1661355
omega2
Posté le 20-12-2007 à 17:58:37  profilanswer
 

Tu ne peux pas ouvrir une connexion réseau à l'appel d'une page web et la garder ouverte pour l'appel de la page suivante.
Même si tu stockes l'identifiant de ressource dans une variable de session, même si tu essayes de sérialiser le contenu de la variable tu arriverais au même résultat : te retrouver avec une connexion fermé.
 
Je t'ai donné plus haut la seule solution valable dans le cadre d'un site web.
 
 
PS : SI c'est juste pour l'utiliser en local alors tourne toi vers GTK/PHP et fait toi une application (avec interface graphique) que tu lances directement ce qui te permettra d'avoir des connexions réseaux qui ne sont pas fermé jusqu'à ce que tu quittes ton application. Mais attention, dans ce cas c'est juste pour du local, ça ne marchera pas comme attendu si tu l'installes sur un serveur web.


Message édité par omega2 le 20-12-2007 à 18:00:59
n°1661374
fattouch_s​quall
Posté le 20-12-2007 à 18:12:44  profilanswer
 

mon application va etre utilisé sur un réseau local pour faire la config a distance des routeur , si je peux basculer vers GTK/PHP est ce facile d'adapter mon code car j'ai plus de tems sinon j'ai pas trop saisie ta solution?

n°1661389
omega2
Posté le 20-12-2007 à 18:29:51  profilanswer
 

Heu ... petite question en passant, après vérification c'est pas deux personnes qui avaient ce problème mais toi il y a environ 1 mois et à nouveaux toi maintenant. Qu'est ce que t'as appris en php pendant les 20 jours qui se sont écoulé depuis la clôture de ton ancienne discussion?

n°1661408
fattouch_s​quall
Posté le 20-12-2007 à 18:47:50  profilanswer
 

mon application est bel et bien terminer, j'arrive a utiliser les variable de session mais il me reste ce probleme la.

n°1661411
fattouch_s​quall
Posté le 20-12-2007 à 18:50:25  profilanswer
 

je veux de l'aide que sur celui la, comment lire de et introduire des commande dans la même socket sans qu'elle soit fermé a chaque regénération, une petite demonstration en pratique ça m'aide bcp svp.

mood
Publicité
Posté le 20-12-2007 à 18:50:25  profilanswer
 

n°1661415
omega2
Posté le 20-12-2007 à 18:58:25  profilanswer
 

On ne peut pas. C'est php qui ferme la connection réseau et on ne peut pas l'éviter quand on bosse sur un site web (ça t'as déjà été expliqué x fois la dernière fois).
 
Pour le coup de faire une application php lancé en local (donc pas en passant par un site web) ça nécessite des changements plus important que de simplement stocker les différentes commandes en session et les réexécuter à chaque fois. Si tu manques de temps alors que ton programme est quasiment finis alors va au plus simple.

n°1661437
fattouch_s​quall
Posté le 20-12-2007 à 20:12:48  profilanswer
 

n'ya t-il pas aucun moyen de faire un formulaire sans regénérer ma page, je seré blqué si je parvient pas a maintenir la socket ouverte.(ajax ça aide pas) et ça nécessité combien de temps pr changer ça en php/GTk???

n°1661537
fattouch_s​quall
Posté le 20-12-2007 à 22:14:53  profilanswer
 

Citation :

La seule manière que t'as de contourner ça, c'est d'ouvrir une session php pour y stocker la liste des ordres déjà demandé jusqu'à présent et de les réexécuter à chaque fois pour retomber (s'il n'y a pas eu de changement sur le serveur) dans l'état voulut et que la nouvelle commande fasse ce qu'on voulait.


 
si vous pouvez svp expliquer moi ça un peu en pratique, ça me vient rien a l(esprit car je comprend pas bien la solution??


Message édité par fattouch_squall le 20-12-2007 à 22:16:12
n°1661608
leflos5
On est ou on est pas :)
Posté le 21-12-2007 à 02:42:59  profilanswer
 

T'as visiblement toujours pas compris l'environnement dans lequel tu bosses... Et pourtant Omega2 a eu la patience de tout te réexpliquer très clairement ici!
 
Essayes d'y mettre un peu de bonne volontée ;)
 
Parce que je suis de bonne humeur je te donne quelques pistes: connexion persistente (pfsocketopen) et la linéarisation d'une instance de classe dans une session ici

n°1661671
fattouch_s​quall
Posté le 21-12-2007 à 09:08:17  profilanswer
 

merci a vous tous pour votre aide c'est bon ce les piste que m'a donné leflos5 et omega2 m'ont été bien utile merci encore une fois :D

Message cité 1 fois
Message édité par fattouch_squall le 21-12-2007 à 09:08:57
n°1788791
sagopa
Posté le 18-09-2008 à 18:03:51  profilanswer
 

fattouch_squall a écrit :

merci a vous tous pour votre aide c'est bon ce les piste que m'a donné leflos5 et omega2 m'ont été bien utile merci encore une fois :D


 
Bonjour,
 
J'ai le même problème :
 
J'ai trouvé la fonction afin d'avoir la connexion persistante d'une socket. J'aimerais passer la ressource dans une variable de session ; pour cela j'ai utilisé serialize() et unserialize() mais ça ne marche toujours !
J'ai vraiment l'impression que ce n'est pas possible ; pourtant tu dis que tu as réussi ...  
 
Peux-tu partager ta solution stp ?  
 
Merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  sequencement socket lié a un formulaire

 

Sujets relatifs
Valider un formulaire automatiquement.Validation de plusieurs formulaire avec un seul bouton
[PHP] Avis sur formulaire et sessionprobleme sur formulaire
Mon contrôleur de formulaire en javascriptComment faire un formulaire de renseignements ???
créer une macro VBA qui modifiera une base de données automatiquementLecture sur socket
Récup de valeurs d'un formulaire quand on sait pas le nb de valeursConnaître l'email dans formulaire de candidature web !!!
Plus de sujets relatifs à : sequencement socket lié a un formulaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR