Scripts et Programmation

PHP - Lancer des processus shell dans une page php

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 :

Copier vers le presse-papierCode 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 :

Copier vers le presse-papierCode 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 :

Copier vers le presse-papierCode 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 :

Copier vers le presse-papierCode 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é) :

Copier vers le presse-papierCode 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.
Cette page a été vue 53969 fois