La 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.
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
Eseguire il PHP e Apache come utente root, dato che è un problema di permessi. Ma è ovviamente sconsigliatissimo!
esiste una alternativa? Oppure poter passare su e password per eseguire lo script php da utente non root?
Grazie mille
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/
Tank you very grazie, domattina faccio un pò di prove!
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
Loggati con l'utente di cui parli e metti il comando nel suo crontab