Scripts et Programmation

PHP - Lancer des processus shell dans une page php

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

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" :
Citation :
/etc/sudoers]www-data ALL = NOPASSWD: ALL


Se référer à l'article Sudo : Utiliser et paramétrer pour plus d'infos.