In particolari condizioni di configurazione: quando cioč non sia disabilitata shell_exec
e non sia abilitata
la direttiva safe_mode
, č possibile esguire dei comandi shell direttamente da uno script PHP.
Addirittura usando l'operatore di esecuzione denominato backticks (apice contrario in una brutta traduzione): ``.
In pratica è possibile catturare facilmente in una variabile l'output di un comando shell con una sola riga di script, ad
esempio
$data_server = `date`;
print "Data sul server: $data_server";
lo stesso risultato, probabilmente con codice più leggibile, è ottenibile tramite la funzione
shell_exec($comando)
il nostro semplice esempio potrà anche essere quindi:
$data_server = shell_exec('date'); // notare gli apici
print "Data sul server: $data_server";
PHP mette a disposizione almeno altre 3 funzioni per l'iterazione con la shell, ognuna di queste con carattestiche particolari
legate per lo più alla gestione del risultato dell'elaborazione. In ogni caso è SEMPRE raccomandabile utilizzare
escapeshellcmd($comando)
oppure
escapeshellarg($comando)
per evitare che i parametri, eventualmente forniti da un utente, da utilizzare nel comando shell, contengano codice eseguibile.
exec($comando, $ritorno_array, $ritorno_valore)
esegue $comando non inviando direttamente nessun output ma ritornando l'ultima riga del risultato.
Il parametro opzionale $ritorno_array conterrà tutte le righe dell'output del comando, una per ogni suo elemento,
$ritorno_var opzionale pure esso, conterrà il lo stato del comando: 0 corrisponde a "comando eseguito correttamente"
system($comando, $ritorno)
esegue il comando shell contenuto in $comando restituendo l'ultima riga dell'output generato oppure FALSE in caso di fallimento,
se è presente il parametro $ritorno allora lo stesso verrà valorizzato con il codice di stato ritornato dal comando, ad esempio
$data_server = system('date', $ritorno);
print "Data sul server: $data_server<br>";
print "Ritorno: $ritorno<br>";
A differenza di exec() quindi il risultato del comando viene minviato direttamente al browser.
sul brower.
infine
passthru($comando, $ritorno)
invia direttamente al browser l'output generato da $comando senza intervenire in alcun modo su essi.
Questa funzione è molto utile ad esempio quando si generino dei file binari (immagini o altro) tramite comandi shell
e li si volgia inviare direttamente al browser.
Riferimenti, esempi e teoria sulle funzioni che PHP fornisce