Invite de Commande en PHP

Invite de Commande en PHP - PHP - Programmation

Marsh Posté le 23-02-2009 à 09:07:56    

Bonjour,

 

Je souhaiterais crée l'équivalent de l'invite de commande en PHP ...
J'ai trouvé un début mais plusieurs problemes se pose ...
Par exemple si je fais un " cd .." je sais que je chage de répertoire mais la commande suivante sera de nouveau executée a partir du point de départ.
J'ai donc mis en place un texte area sur plusieurs lignes afin de pouvoir executer plusieurs commandes successives :

 
Code :
  1. <html>
  2. <head>
  3.  <meta content="text/html; charset=ibm850"
  4. http-equiv="content-type">
  5.  <title></title>
  6. </head>
  7.  
  8. <body>
  9.  
  10. <?unlink('commande.bat')?>
  11.  
  12. <form action="exe2.php" method="post">
  13. <p>
  14. <textarea name="cmd" rows="8" cols="45">
  15. </textarea>
  16. <input type="submit" value="Valider" />
  17. </p>
  18. </form>
  19. <?php
  20.  
  21. if (isset($_POST['cmd']))  {
  22. $cmd=$_POST['cmd'] ;
  23.  
  24. $fp = fopen("commande.bat","w+" );
  25. fputs($fp, $_POST['cmd']);
  26. fclose($fp);
  27.  
  28. system("commande.bat" );
  29.  
  30. }
  31.  
  32. ?>
  33. </body>
  34. </html>
 

Mais voila j'obtiens une mise en page horrible, aucun saut de lignes ...
et si je pouvais obtenir une méthode également pour pouvoir taper les commande une a une sans revenir au début ce serait sympa ...
Merci a vous :D


Message édité par elmarokinho le 23-02-2009 à 09:09:01
Reply

Marsh Posté le 23-02-2009 à 09:07:56   

Reply

Marsh Posté le 23-02-2009 à 10:54:18    

Le problème des commandes une à une vient du fait du protocole HTTP et de PHP. Chaque requête (donc chaque envoi du formulaire) va initialiser un environnement neuf. Donc il ne garde pas ce qu'il avait fait avant.

 

Faut trouver le moyen d'ouvrir un shell, de le laisser ouvert, et d'arriver à le récupérer à chaque requête.

 

La mise en page horrible, c'est à quel niveau ? Pour les sauts de lignes, n'oublie pas qu'en HTML ils doivent être remplacés par <br />


Message édité par FlorentG le 23-02-2009 à 10:54:31
Reply

Marsh Posté le 23-02-2009 à 11:21:07    

"horrible" dans le sens ou si je tape simplement :

Code :
  1. "cd ..
  2. dir "


 
j'obtiens :

Code :
  1. "C:\wamp\www\upload>cd .. C:\wamp\www>dir Le volume dans le lecteur C n'a pas de nom. Le numéro de série du volume est XXXX-XXXX Répertoire de C:\wamp\www 12/02/2009 09:33  . 12/02/2009 09:33  .. 09/02/2009 15:04 37 508 index.php 09/02/2009 15:08  spip_v2 09/02/2009 15:04  spip 20/02/2009 11:49  upload 1 fichier(s) 37 508 octets 5 Rép(s) 165 712 818 176 octets libres "


 
c'est moche ....


Message édité par elmarokinho le 23-02-2009 à 11:21:43
Reply

Marsh Posté le 23-02-2009 à 11:23:14    

Ben oui c'est normal [:petrus75] Comme je vient de dire, pour rendre un retour chariot, il faut utiliser <br />. Ou mieux, englobe la sortie dans un <pre></pre>

Reply

Marsh Posté le 23-02-2009 à 11:27:37    

bah oui je suis d'accord pour le "</br>" mais étant donné que le resultat m'est donné d'un bloc , ou dois-je le placé?
 
je teste avec le <pre> ...

Reply

Marsh Posté le 23-02-2009 à 11:31:29    

Avec les balises "<pre>"

Code :
  1. C:\wamp\www\upload>cd ..
  2. C:\wamp\www>dir
  3. Le volume dans le lecteur C n'a pas de nom.
  4. Le numéro de série du volume est D043-2828
  5. Répertoire de C:\wamp\www
  6. 12/02/2009  09:33              .
  7. 12/02/2009  09:33              ..
  8. 09/02/2009  15:04            37 508 index.php
  9. 09/02/2009  15:08              spip_v2
  10. 09/02/2009  15:04              spip
  11. 20/02/2009  11:49              upload
  12.                1 fichier(s)           37 508 octets
  13.                5 Rép(s)  165 705 338 880 octets libres


 
Okay merci c'est mieux ...  :)  
 
ET sinon c'est donc impossible d'executer des commande a la suite en ayant le résultat entre chaque commande (comme dans une fenetre dos classique) sans avoir a retourner au début a chaque fois?  :??:  
 
 

Reply

Marsh Posté le 23-02-2009 à 11:48:50    

nl2br() si jamais.
 
A priori, je dirais difficile. Essaie peut-être de stocker en session les variables d'environnement à chaque fin, et de les lire au début
 
SET


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 23-02-2009 à 11:50:05    

en mode horrible, tu empiles chaques commande (genre dans la session), tu depiles a chaque page, mais apres 50 commandes, tu vas executer 50 commandes au chargement de ta page :/

Reply

Marsh Posté le 23-02-2009 à 12:46:08    

Tu peux toujours essayer d'implémenter un système à deux boutons :
- "Ajouter aux commandes"
- "Exécuter"
Ajouter permettant d'empiler les commandes, et Exécuter les exécute (!)

Reply

Marsh Posté le 23-02-2009 à 13:02:14    

problème intéressant  [:implosion du tibia]

Reply

Marsh Posté le 23-02-2009 à 13:02:14   

Reply

Marsh Posté le 23-02-2009 à 13:17:14    

je pense que je vais faire un formulaire qui rajoute une ligne au fichier  
"commande.bat" et qui execute le tout lorsque l'utilisateur valide et mettre un bouton pour supprimer ce fichier.
 
Mais vers quoi doit pointer ce 2e bouton? lorsque je fais un unlink bizarrement cela ne marche pas :???:

Reply

Marsh Posté le 23-02-2009 à 13:38:34    

Pourquoi ne pas faire ça avec de l'ajax ?  
Et ne récupérer que le résultat de la commande ?
Tu conserverai ainsi l'historique de ton shell vu que la page ne serait pas rafraichie

Reply

Marsh Posté le 23-02-2009 à 13:46:24    

Ajax ... je ne connais pas =S

Reply

Marsh Posté le 23-02-2009 à 14:00:45    

yellu a écrit :

Pourquoi ne pas faire ça avec de l'ajax ?  
Et ne récupérer que le résultat de la commande ?
Tu conserverai ainsi l'historique de ton shell vu que la page ne serait pas rafraichie


[:prozac]  [:delarue2]  T'as rien compris toi :D

Reply

Marsh Posté le 23-02-2009 à 16:06:57    

Bon déjà avec :

Code :
  1. pclose(popen('start cmd.exe', 'r'));


On peut ouvrir un cmd, qui reste résident et ne bloque pas l'exécution. Reste à trouver comment récupérer l'instance par après, y injecter des commandes et récupérer la sortie. Stay tuned

Reply

Marsh Posté le 23-02-2009 à 16:43:09    

Hmmm apparemment faudrait plutôt utiliser un Wscript.Shell qui peut activer n'importe quelle application (donc j'imagine un cmd) via son ProcessId.
 
Faut trouver alors un moyen de lancer un cmd et de récupérer son ProcessId, qu'on metterait par exemple en session.

Reply

Marsh Posté le 23-02-2009 à 20:16:55    

FlorentG a écrit :


[:prozac]  [:delarue2]  T'as rien compris toi :D


 
En effet je viens de voir que son problème est de retrouver ses petits une fois sur le serveur (nouveau process à chaque) et non de perdre ses commande passés avec le rafraichissement :p
Désolé pour mon commentaire HS

Reply

Marsh Posté le 23-02-2009 à 22:05:04    

En fait il doit garder les précédentes commandes justement en cas de CD par exemple.
 
Mais bonne nouvelle, J'Y SUIS PRESQUE HAHAHAHAHA

Reply

Marsh Posté le 24-02-2009 à 08:49:20    

Le but de tous cela ... n'est pas uniquement de faire joujou avec une invit de commande ..
 
Je dois en fait lancer une appli qui souvre dans une fenetre DOS, ou il faut selectionner 2 choix pour le lancement , il faut donc dans un premier temps lancer l'appli est retourner ce qu'elle demande a l'écran (ça j'y arrive ), puis valider le choix de l'utilisateur dans la meme appli ...
etc-ce jouable?
 
Merci de votre aide

Reply

Marsh Posté le 24-02-2009 à 10:12:08    

elmarokinho a écrit :

Le but de tous cela ... n'est pas uniquement de faire joujou avec une invit de commande ..


Ah nan faut pas dire ça [:sadnoir] J'y ai passé plus de 6h hier sur ce truc :D Reste juste à trouver comment injecter des commandes dedans (normalement c'est avec la fonction de l'API Win32 WriteConsoleInput, mais je ne me vois pas marshaller les pires structures en PHP [:pingouino]

Reply

Marsh Posté le 24-02-2009 à 10:21:54    

Non mais ne desespere pas FlorentG ... si on arrive a garder l'invite de commande "ouvert" d'une commande a l'autre le principe reste le meme pour la suite ...  
 
C.F mon post :  
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0
 
En tout cas merci d'y mettre autant de volonté :D  
Moii cela fait 2 jours je tourne autour je n'avance pas :(

Reply

Marsh Posté le 24-02-2009 à 10:52:12    

Bon j'ai des trucs à faire, je continuerai ce soir :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed