[PHP] Interazione con la shell dei comandi

Shell PHP at davidonzo.comLa domanda è di quelle chiare: "E’ possibile via php, interagire con la shell?".

La risposta è molto semplice: sì!

Basta leggere queste pagine del manuale on line e vedere quali funzioni sono le migliori per i nostri intenti.

Tutte le funzioni incluse in quella pagina sono parte del core del php, quindi non sarà necessario abilitare estenzioni o dare particolari direttive di compilazione. Conseguenza naturale è anche la non necessità di settaggi particolari di alcun parametro del file php.ini.

Rimanendo in tema di shell, la funzione più interessante è sicuramente shell_exec(). Oltre ad eseguire un comando da shell, la funzione ritorna un output stringa uguale alla risposta del terminale. Per listare il contenuto di una directory basterà scrivere:

echo "<pre>".shell_exec(‘ls’)."</pre>";

Se il vostro sistema operativo è Windows, invece di ls userete il comando dir.

echo "<pre>".shell_exec(‘dir’)."</pre>";

Da questo punto di vista, shell_exec() è molto simile a system(). Con la differenza che il compito di system() è proprio quello di mostrare l’output del comando, mentre in shell_exec la cosa è a discrezione del coder.

Se l’unico nostro intento è quello di avviare un programma estero, basterà usare exec(). Funzione che in default non torna nessun output e si occupa solo di avviare un determinato programma, esterno al php.

Tutti gli argomenti delle funzioni adibite all’avvio di programmi esterni accettano parametri e quindi anche variabili passate via get, post, via sessione etc etc… In questi casi è buona norma far trattare tali variabili da escapeshellarg() o escapeshellcmd().

Con un po’ di JavaScript, AJAX e le funzioni predette è possibile creare in poco tempo una shell web-based in php. Utilità discutibile, pericolosità elevata. Quindi se volete farlo, il consiglio è di non pubblicare mai il risultato in un vostro sito web.

7 thoughts on “[PHP] Interazione con la shell dei comandi”

  1. Ottimo e abbondante, bella guida chiara e concisa, le funzioni fungono bene con molti comandi ma falliscono con altri, tipo:
    "ifconfig eth0 down"
    o anche up, è possibile risolvere il problema?
    Grazie

  2. esiste una alternativa? Oppure poter passare su e password per eseguire lo script php da utente non root?
    Grazie mille

  3. Ciao, io dovrei lanciare un comando sul server linux tramite php, il problema è che lo devo lanciare con un determinato utente (senza password), sai dirmi se è possibile?
    Grazie

Comments are closed.