Scritto da davidonzo il 04/08/2008, in OpenSource, Web, Tutorial

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.

Hai trovato l'articolo interessante?
Sottoscrivi il Feed RSS per essere informato automaticamente degli ultimi aggiornamenti!
 
.Commenti rss
# 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
Di Gio  (Inviato il 18/09/2008 @ 22:53:23)
# 2
Eseguire il PHP e Apache come utente root, dato che è un problema di permessi. Ma è ovviamente sconsigliatissimo!
Di davidonzo  (Inviato il 18/09/2008 @ 23:05:34)
# 3
esiste una alternativa? Oppure poter passare su e password per eseguire lo script php da utente non root?
Grazie mille
Di Gio  (Inviato il 18/09/2008 @ 23:09:02)
# 4
Configurare l'utente apache dandogli tutti i privilegi e nessuna richiesta password.

Dovresti fare più o meno l'opposto di qui: http://www.davidonzo.com/post/433/bello-sudo-ma-impostarlo-meglio/
Di davidonzo  (Inviato il 18/09/2008 @ 23:21:58)
# 5
Tank you very grazie, domattina faccio un pò di prove!
Di Gio  (Inviato il 18/09/2008 @ 23:31:45)


I commenti possono essere moderati.
Se non lo vedi comparire subito non reinserirlo più volte.
Grazie per la gentile collaborazione.