[PHP] Ouvrir un fichier sur un serveur distant

Ouvrir un fichier sur un serveur distant [PHP] - PHP - Programmation

Marsh Posté le 10-10-2011 à 15:29:59    

Bonjour,
 
Je suis actuellement sur un projet pour lequel j'ai besoin d’exécuter un fichier .exe sur un serveur distant, à travers une interface web et je ne trouve pas comment faire. Telnet ? Autre ?
 
Merci de votre aide.

Reply

Marsh Posté le 10-10-2011 à 15:29:59   

Reply

Marsh Posté le 11-10-2011 à 08:44:02    

Précision :
Je dois m'identifier pour avoir accès à ce serveur...

Reply

Marsh Posté le 11-10-2011 à 10:46:46    

ssh plutôt que telnet, je pense :/
 
http://www.php.net/manual/en/book.ssh2.php


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-10-2011 à 16:32:32    

En fait le serveur en question ne possède ni de service telnet, ni ssh, le seul moyen actuel de s'y connecter est via le bureau à distance.
 
Par contre, j'ai trouvé qu'avec l'outil PsExec, il est possible de lancer des commandes sur un serveur distant.
Donc en admettant que PsExec.exe se trouve sur c:\ de mon poste local et le fichier à executer sur c:\batch\fichier.bat sur le serveur 192.9.200.6 :  
lorsque je lance la commande c:\psexec \\192.9.200.6 c:\batch\fichier.bat -u login -p password --> celà fonctionne correctement
 
Par contre lorsque cette commande est lancée via ma page php avec PsExec.exe dans c:\wamp\www\monprojet\ :
$commande = "psexec \\192.9.200.6 c:\batch\fichier.bat -u login -p password";
exec($commande);
-> la page n'en fini pas de charger et le fichier n'est pas exécuté. Je ne comprend pas pourquoi...
Un peu d'aide me serait utile. Merci

Reply

Marsh Posté le 12-10-2011 à 09:03:53    

J'ai ouvert y'a qq jours un topic sur le même pb observé : une ligne de commande qui passe très bien dans le cmd.com mais pas quand elle est lancée depuis shell_exec :/ J'ai pas eu de réponse qui a résolu mon pb. A noter que je n'ai pas ce pb quand c'est sous Linux.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 12-10-2011 à 11:01:47    

Malheureusement le serveur web en question est sous windows :/
 
Ce qui est fou c'est que si je remplace
$commande = "psexec \\192.9.200.6 c:\batch\fichier.bat -u login -p password";  
par
$commance = "mkdir toto"
-> le repertoire toto est bien crée !
Le problème vient donc de l'execution de psexec mais je ne comprend pas pourquoi.
 
Sinon il ne serait pas possible de créer une sorte "d'objet cmd" qui permettrait ensuite qu'on lui envoie des commandes à executer afin de ne pas avoir à utiliser exec(),shell_exec() ou system() ?...

Reply

Marsh Posté le 12-10-2011 à 11:21:58    

Attention, un seul \, c'est pour échapper un caractère! Faut les doubler ou mettre / à la place :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 12-10-2011 à 13:27:47    

j'ai réessayé avec $commande = "psexec \\\\192.9.200.6 c:\\batch\\fichier.bat -u login -p password";  
mais toujours le même problème.
En tapant "php psexec" sur google, je suis tombé sur plein de topic où les gens ont le même problème mais aucune solution apportée :(
Si quelqu'un a une idée pour pouvoir faire ce que je souhaite sans passer par PsExec, je suis preneur...

Reply

Marsh Posté le 12-10-2011 à 16:00:24    

J'ai modifier le code comme celà (PsExec.exe dans c:\):
 
exec("c:\psexec \\\\192.9.200.6 c:\batch\fichier.bat -u login -p password 2>&1",$output);
echo var_dump($output);
 
et voilà ce que j'obtiens
 
array(8) { [0]=> string(0) "" [1]=> string(41) "PsExec v1.98 - Execute processes remotely" [2]=> string(40) "Copyright (C) 2001-2010 Mark Russinovich" [3]=> string(35) "Sysinternals - www.sysinternals.com" [4]=> string(0) "" [5]=> string(22) "Descripteur non valide" [6]=> string(59) "Connecting to 192.9.200.6... Couldn't access 192.9.200.6:" [7]=> string(28) "Connecting to 192.9.200.6..." }
 
Pourtant les identifiants login et password sont ceux du compte administrateur...
Et que voudrait dire ce "Descripteur non valide" ?
Car la même commande passée dans cmd fonctionne toujours...
 
A noter que sans le 2>&1 (je ne sais pas à quoi ça sert mais j'ai vu quelqun mettre ça sur un forum), j(obtiens :
 
array(0) {}


Message édité par sebastien4444 le 12-10-2011 à 16:00:47
Reply

Marsh Posté le 12-10-2011 à 16:18:53    

C'est pour rediriger le descripteur 2 (stderr?) dans le 1 (stdout?). Le &, c'est pour pas rendre bloquant la fin de l'exécution de la commande.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 12-10-2011 à 16:18:53   

Reply

Marsh Posté le 12-10-2011 à 16:27:21    

Merci pour l'info rufo ;)
 
Malheureusement, malgrès 5h passées sur les différents résultats de google, je n'arrive toujours pas à trouver la solution à mon problème :(

Reply

Marsh Posté le 13-10-2011 à 16:26:05    

La vrai solution c'est de faire un peu moins de bidouille...
 
2 solutions :
- serveur proprio via socket qui attends un requête et exécute le dit programme à chaque requête (devrais être très léger même via un Service Windows)
- serveur HTTP avec un WS/une page PHP qui attends une requête et exécute le dit programme
 
Et même là c'est encore pas gégé...


Message édité par MEI le 13-10-2011 à 16:26:30

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Sujets relatifs:

Leave a Replay

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