[PHP] execution d'un fichier BASH

marco -  
avion-f16 Messages postés 20367 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Merci de lire mon post ;)
Je vous rassure, j'ai bien lu les messages portant sur le même sujet, mais je n'y ai pas trouvé ma réponse...

Voilà : je voudrais exécuter un fichier de script shell lancé par PHP (avec n'importe laquelle des commandes "exec-like").
Je veux faire l'inventaire des IP et MAC du réseau avec nmap. Comme ya trois réseaux différents, je voudrais lancer un script shell du genre :

- nmap [...] > nmap1.txt
- nmap [...] > nmap2.txt
- nmap [...] > nmap3.txt
quelques commandes pour trier, joindre etc. et obtenir à la fin un fichier "clean" avec juste les infos dont j'ai besoin, que je pourrais lire avec PHP et un fopen().

Je sais que je pourrais le faire avec PHP uniquement une fois les nmap effectués mais je préfère un script shell.

Donc j'ai testé un exec("script.bash") contenant les 3 lignes nmap ci-dessus mais les fichiers txt ne sont pas créés... les causes possibles?

Merci d'avance de vos réponses et bonne soirée
A voir également:

8 réponses

kilian Messages postés 8854 Statut Modérateur 1 526
 
Salut,

Tu as essayé ton script bash directement sur un shell?
2
karine
 
Salut !

Ecris peut-etre exec("./script.bash") car exec reçoit en paramètre une commande shell.
0
marco
 
le script bash fonctionne bien quand il est lancé directement par la console, et le ./script.bash dans le exec() ne change rien, aucun fichier n'est créé en sortie...
je vois pourtant rien d'illogique...
si quelqu'un pouvait m'envoyer un bout de code qui marche lui afin que je compare.
merci de vos réponses, et merci d'avance pour les prochaines
0
Romain
 
Salut, personnellement j'utilise la ligne de commande comme ca :
$cmd = "unzip $source -d $temporary_target";
	exec($cmd, $exec_output, $exec_retval);

ne vous preoccupez pas des 2 derniers args
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Romain
 
... mais ils sont essentiels (en tout cas pour moi) meme si on ne s'en sert pas
0
marco
 
toujours pas...
voilà le code php :

<?
echo "Lancement du script de recherche...<br />";

//code de romain
$cmd="maj.bash";
exec($cmd, $exec_output, $exec_retval); 
foreach($exec_output as $exec_outputline)
{
   echo("$exec_outputline<br>");
}

//code de php.net
$cmd2="ls -l";
exec("$cmd2 2>&1", $output); 
foreach($output as $outputline)
{
   echo("$outputline<br>");
}

echo "Fin d'éxecution du script de recherche <br />";
?>


Et à l'affichage seul le code de php.net a fonctionné.
exec_output est bien un tableau ais apparemment vide...
Je précise aussi que le fichier shell est en 777

Je vous mets le code shell, dès fois que...

#!/bin/bash

echo "Lancement de la commande récupération des hôtes des réseaux..."
nmap -sP IP/24 > "nmap1.tmp"
nmap -sP IP/24 > "nmap2.tmp"
nmap -sP IP/24 > "nmap3.tmp"

echo "Fin"


mais il marche bien quand il est pas lancé par PHP :/

Perso j'ai plus d'idée là...
0
marco > marco
 
oki, c'est résolu.
J'ai redirigé les .tmp vers le dossier qui est fait pour ça lol > /tmp/ et là bizarrement ça marche! lol forcement je crois que le problème venait du fait que ne précisant pas le chemin complet bah le système essayait d'écrire à la racine / et jpense pas qu'on puisse, même en root...
enfin bref, c'est résolu

Merci à vous, et pour ceux qui ont le même problème :
http://lists.ze-linux.org/2003-08/msg00145.html
voilà le post d'un forum qui m'a débloqué ^^ si ca peut servir...


Bonne journée à tous
0
marco
 
Re!
J'avais posté un nouveau problème dans le forum Unix-Linux car il concerne la commande shell NMAP, et vu que je n'ai pas bcp de réponses, on me conseille aussi ce forum

-------
Je viens de voir un truc bizarre avec la commande nmap:
Est ce normal qu'un "nmap -sP IP/24 > /tmp/test.tmp" lancé par console affiche 2 lignes par hôte (host+\n+@Mac), et que le même nmap lancé par un exec() de PHP n'affiche que la ligne host ??

(//Ce post pourrait faire partie aussi du forum programmaion mais je voudrais savoir si ce résultat est dû à une particularité de nmap.) Au vu de ce résultat, j'ai l'impression que nmap lance une autre commande pour pouvoir afficher l'@mac correspondant au host trouvé, ce qui expliquerait peut être pourquoi avec PHP je n'obtient que les lignes host...
lien : http://www.commentcamarche.net/forum/affich-1564004-%5BCOMMANDE%5D-Etranget%E9-de-Nmap
------

Résultat de la commande :
En console j'ai :
"
Host [@IP] appears to be up.
MAC Address: [@MAC] (type machine)

" //pour chaque machine.

En Php j'ai seulement :
"
Host 170.60.248.1 appears to be up.

" //pour chaque machine.

Suivant les réponses du forum Unix-Linux, j'ai appliqué certaines modifications qu'on m'a conseillées (2>&1 par exemple) mais cela ne fonctionne pas mieux. Qulequ'un a déjà eu ce genre de problème? une solution?

Merci de votre aide, et bien bonne journée à vous
0
marco
 
Up!
Re!
J'ai tout essayé, les exec, system et passthru mais rien n'y fait. Please si quelqu'un pouvait m'aider! un grand merci d'avance!!
0
ShadowAngel
 
a ckeu g testé, lé commande exec(), et lé otre dan le mm style, sont bloqué par lé hbergeur, jpeu faire ocune commande du genre ipconfig... ext. en php.

ca vien peu etre de la..
apré jsui débutan en php
0
niano
 
et en langue française aussi...
0
avion-f16 Messages postés 20367 Date d'inscription   Statut Contributeur Dernière intervention   4 509 > niano
 
Et ne pas remonter les vieux topics dont la dernière réponse date de plus de 2 ans ...
0