(PHP 4, PHP 5)
exec — Esegue un programma esterno
$command
[, array &$output
[, int &$return_var
]] )
exec() esegue il comando passato da
command
, la funzione non invia nessun output.
Restituisce semplicemente l'ultima linea dal risultato del comando.
Se si ha bisogno di eseguire un comando ed avere tutti i dati passati
direttamente indietro senza alcuna interferenza, usare la funzione passthru().
Se l'argomento output
è presente, allora tale vettore specificato
verrà riempito con ogni linea del output del comando.
I fine riga, come \nnon sono inclusi
in questo array. Notare che se il vettore contiene già degli elementi,
exec() li aggiungerà in coda al vettore.
Se non si vuole che la funzione aggiunga elementi, eseguire un
unset() sul vettore prima di passarlo ad
exec().
Se viene passato l'argomento return_var
assieme all'argomento output
, allora lo stato
del comando eseguito verrà scritto in questa variabile.
Example #1 Un exec() example
<?php
// restituisce la username del proprietario del processo php/httpd attivo
// (su um sistema con l'eseguibile "whoami" nel path)
echo exec('whoami');
?>
Se si permette di passare a questa funzione i dati provenineti dagli input utente, si dovrebbe utilizzare la funzione escapeshellarg() oppure escapeshellcmd() in modo da essere sicuri che gli utenti non possano compromettere il sistema eseguendo comandi arbitrari.
Nota:
Se si avvia un programma con questa funzione e si vuole lasciarlo in esecuzione in background, ci si deve accertare che l'output del programma venga redirezionato verso un file o qualche altro stream di output, altrimenti PHP si fermerà finché l'esecuzione del programma sarà terminata.
Nota: Quando si abilita la modalità sicura, si può eseguire soltanto gli eseguibili presenti nella directory safe_mode_exec_dir. Per motivi pratici, attualmente, non è permesso avere .. come componente del percorso di un eseguibile.
Con la modalità sicura attivata, tutte le parole che seguono il comando iniziale sono trattate come argomenti. Quindi, echo y | echo x diventa echo "y | echo x".
Vedere anche system(), passthru(), popen(), escapeshellcmd() pcntl_exec() e l'operatore backtick.