exec

(PHP 4, PHP 5, PHP 7, PHP 8)

execEjecuta un programa externo

Descripción

exec(string $command, array &$output = null, int &$result_code = null): string|false

exec() ejecuta el comando command.

Parámetros

command

El comando a ejecutar.

output

Si el argumento output está presente, entonces este array será rellenado por las líneas devueltas por el comando. Los espacios al inicio y al final de la cadena, como \n, no serán incluidos en este array. Cabe señalar que si este array contiene elementos, exec() añadirá las nuevas líneas al final del array. Si no se desean concatenar los nuevos elementos, utilice la función unset() con este array antes de pasárselo a exec().

result_code

Si el argumento result_code está presente además del array output, entonces el estado de retorno de ejecución será escrito en esta variable.

Valores devueltos

La última línea del resultado del comando. Para ejecutar un comando y obtener el resultado sin ningún tratamiento, debe utilizarse la función passthru().

Devuelve false en caso de error.

Para recuperar la salida del comando ejecutado, asegúrese de definir y utilizar el parámetro output.

Errores/Excepciones

Emite una advertencia E_WARNING si exec() no puede ejecutar el comando command.

Levanta una excepción ValueError si command está vacío o contiene bytes nulos.

Historial de cambios

Versión Descripción
8.0.0 Si command está vacío o contiene bytes nulos, exec() levanta ahora una excepción ValueError. Anteriormente, se emitía una advertencia E_WARNING y se devolvía false.

Ejemplos

Ejemplo #1 Ejemplo con exec()

<?php
// Muestra el nombre de usuario que ejecuta el proceso php/http
// (en un sistema que tenga "whoami" en el camino de ejecutables)
$output=null;
$retval=null;
exec('whoami', $output, $retval);
echo
"Returned with status $retval and output:\n";
print_r($output);
?>

El resultado del ejemplo sería algo similar a:

Returned with status 0 and output:
Array
(
    [0] => cmb
)

Notas

Advertencia

Si se va a permitir que datos provenientes del usuario sean enviados a esta función, habría que utilizar escapeshellarg() o escapeshellcmd() para asegurarse que el usuario no intenta engañar al sistema para que ejecute comandos arbitrarios.

Nota:

Si ejecutamos un programa con esta función y queremos dejarlo ejecutándose en segundo plano, hay que asegurarse que la salida del mismo es redireccionada a un fichero u otro flujo de salida. No hacerlo hará que PHP se congele hasta que termine la ejecución del programa.

Nota:

En Windows exec(), iniciará primero cmd.exe para lanzar el comando. Si se quiere iniciar un programa externo sin iniciar cmd.exe use proc_open() con la opción bypass_shell establecida.

Ver también