PHP - Lancer des processus shell dans une page php
Table des matières
Dans cet article, nous allons voir comment, sur un serveur web, exécuter une commande SHEL (Linux) et afficher le résultat dans la page web.
Cet article utilise des exemples, ce qui est plus facile pour comprendre.
Pour afficher le contenu du fichier /etc/hosts, on va utiliser ce bout de code :
Ici, on ajoute une balise "header" pour rafraîchir la page toutes les secondes :
Il est nécessaire de posséder screen sur le serveur :
Si on veut s'assurer que le script ne soit lancé qu'une fois, on nomme notre screen et on vérifie s'il existe :
Il suffit de mettre sudo dans la commande (et d'avoir accessoirement sudo d'installé) :
Oui, mais , qui renseigne le mot de passe ??
Solution "bourrin" dans /etc/sudoers :
Se référer à l'article Sudo : Utiliser et paramétrer pour plus d'infos.
Introduction
Dans cet article, nous allons voir comment, sur un serveur web, exécuter une commande SHEL (Linux) et afficher le résultat dans la page web.
Cet article utilise des exemples, ce qui est plus facile pour comprendre.
Lancer une commande et afficher le résultat dans la page
Pour afficher le contenu du fichier /etc/hosts, on va utiliser ce bout de code :
Code PHP :
<?php $output = shell_exec('cat /etc/hosts'); echo "<pre>$output</pre>"; ?>
Afficher périodiquement les 20 dernières lignes d'un fichier de log
Ici, on ajoute une balise "header" pour rafraîchir la page toutes les secondes :
Code PHP :
<?php header("Refresh: 1;url=http://192.168.18.4/syslog.php"); $output = shell_exec('tac /var/log/syslog | head -n20'); echo "<pre>$output</pre>"; ?>
Lancer un script détaché de la page php
Il est nécessaire de posséder screen sur le serveur :
Code PHP :
<?php shell_exec('screen -dm sleep 60'); ?>
Si on veut s'assurer que le script ne soit lancé qu'une fois, on nomme notre screen et on vérifie s'il existe :
Code PHP :
<?php $val = shell_exec('screen -ls | grep -c php '); //echo $val; if ( $val < 1 ) { shell_exec('screen -dmS php sleep 60'); } else { echo "La commande a déja été lancée"; } ?>
Lancer un script en root
Il suffit de mettre sudo dans la commande (et d'avoir accessoirement sudo d'installé) :
Code PHP :
<?php $output = shell_exec('sudo id'); echo "<pre>$output</pre>"; ?>
Oui, mais , qui renseigne le mot de passe ??
Solution "bourrin" dans /etc/sudoers :
Citation :
www-data ALL = NOPASSWD: ALL
Se référer à l'article Sudo : Utiliser et paramétrer pour plus d'infos.