Bash-Linux.com : Le SHELL pour les nuls

  Actuellement 50 lignes de commande et 1472 man disponibles
login as: root
root@213.186.33.18's password:
Last login: Thu Feb 9 4:55:23 2012 from 38.107.179.230
[root@bash-linux ~] # echo "Bienvenue sur Bash-Linux.com"_
 Comment faire du SHELL en PHP

Vous voulez faire du SHELL, mais votre n'avez pas accès à SSH sur votre hébergement?
Ou alors, vous voulez utiliser des lignes bash trouvées ici ou ailleurs pour vous faire des petits scripts puissants d'administration de site?
Bonne pioche. Il faut savoir que PHP sait faire du SHELL, avec une fonction assez simple : exec().

exec() en PHP peut prendre deux arguments, le premier étant une ligne de commande comme celles qu'on vous donne sur ce site, et le second étant une variable PHP, qui va contenir le résultat sous la forme d'un tableau (Array). Il vous restera simplement alors à travailler ce tableau en HTML/CSS pour l'afficher à votre convenance.

Voyez l'exemple ci-dessous, c'est très simple à comprendre. La moitié des scripts PHP de 3 pages qu'on voit à droite à gauche sur le net pourrait etre fait en 2 lignes grâce à une juste utilisation du SHELL.
Et surtout, c'est 20 fois plus rapide à exécuter.

 Exemple de code pour afficher les fichiers de votre hébergement web supérieurs à 10 Mo

Php-Code:
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
<?php
// /www/ est la racine de votre site mais c'est parfois un simple /  
// et changez 10240 (10 Mo) par la taille que vous voulez
exec("ls -Ssh1 `find /www/ -size +10240 -type f`",$result);

$result=implode("</td></tr>\n<tr><td>",$result);

echo 
"<table cellpadding=3 cellspacing=3 border=1><tr><td>".$result."</td></tr></table>";
 
?>

Et hop! en 3 lignes vous avez le tableau bien classé de vos .
ça fonctionne bien sûr avec n'importe quelle ligne SHELL qui retourne un résultat, un find, etc....

Vous voulez afficher les dossiers de votre hébergement de site web, classés par ordre de taille? Il suffit de changer la ligne de commande :
du /www/ -km --max-depth=1 | sort -nr

Vous voulez faire petit moteur de recherche de fichiers? Utilisez Find avec un petit formulaire HTML :
find /www/ -name "*bonjour*" -type f
Vous pouvez mettre à la place de bonjour un $_POST de votre formulaire, un .jpg pour chercher les JPEG, etc...
Voilà un petit moteur de recherche en PHP super puissant en 2 lignes!


Si vous voulez vous pouvez même chercher une string à l'intérieur des fichiers doc, txt, html, rtf, excel... mais pas pdf hélas :
find /www/doc/ -type f | xargs grep "mot_a_trouver"

Etc etc etc...

Simple non?




 Commentaires
Daniel Caillibaud
Pour économiser des pipes, utiliser le -exec de find.

Par exemple, remplacer
ls -Ssh1 `find /www/ -size +10240 -type f`
(qui d'ailleurs risque de planter avec du "too much arguments" si find retourne trop de fichiers)
par
find /www/ -size +10240 -type f -exec ls -Ssh1 {} \;

et
find /www/doc/ -type f | xargs grep "mot_a_trouver"
par
find /www/doc/ -type f -exec grep "mot_a_trouver" {} \;

le {} désigne chaque retour de find (ne peut être utilisé qu'une fois après le exec) et le \; indique la fin de la commande que -exec doit lancer.

sleh
ich liebe dich

brokenclock
>La moitié des scripts PHP de 3 pages qu'on voit à droite à gauche sur le net pourrait etre fait en 2 lignes grâce à une juste utilisation du SHELL

ben oui, mais alors:
- il faut que ton serveur autorise l'utilisation de la fonction exec,
- il faut que ton serveur utilise bash (exit windows)

Tout cela détruit une des caractéristiques les plus intéressante de PHP : la portabilité du code. L'intérêt de publier des solutions basées sur exec() sont donc assez limitée, en tout cas pour les publier.

 Ajouter un commentaire
Utilisez la balise <code> pour encadrer vos lignes de code

Votre nom


Votre commentaire


Un petit captcha rapide




 Nota Bene
Exécuter une ligne de commande quelconque peut potentiellement endommager votre serveur d'hébergement et/ou vos fichiers. Nous ne pourrons en aucun cas être tenus responsables de tout dommage et/ou perte de données liés de près ou de loin à l'utilisation des lignes fournies sur ce site.


 Toutes les lignes de code
Par popularité
Par fonction
Recherche avancée
 Les logiciels SHELL/SSH
Putty
Astuces Bash
Faire du SHELL avec PHP!
 La doc officielle
Les man Linux en français
Les man Linux en anglais
 Proposer vos bash
Partagez vos lignes!
 Les requêtes
Déposer une requête
Voir/répondre à une requête
 Quelques sites interessants
Bons sites pour apprendre
 Rechercher