Invocar comando de Windows desde PHP con exec

PHP: ejecutar un comando del sistema

En este post te mostraré cómo ejecutar un comando desde PHP como si lo estuviéramos invocando desde la terminal, a través de exec.

Esto va a funcionar en Windows y Linux. Vamos a ver cómo ejecutar un comando, obtener su salida y su código de salida.

Sobre exec

Esta función nos permite invocar a un comando desde PHP. Recuerda que debes tener cuidado si los argumentos son proporcionados por el usuario, y para ello deberías usar escapeshellarg.

Pero bueno, veamos. La sintaxis de exec es:

exec(comando, salidaDelComando, codigoDeSalida);

De modo que como primer argumento recibe el comando que se va a ejecutar, y después le estamos indicando las variables en donde se pondrá la salida del comando y el código del mismo, en ese orden.

Por cierto, la salida del comando será un arreglo en donde cada elemento será una línea de la salida.

Ejemplo de exec con PHP

Veamos un primer ejemplo. En este caso vamos a listar los archivos en el directorio actual. Primero con Linux, para ese caso usamos el comando ls y el código queda así:

<?php
$comando = "ls";
exec($comando, $salida, $codigoSalida);
echo "El código de salida fue: " . $codigoSalida;
echo "\n";
echo "Ahora imprimiré las líneas de salida:";
foreach($salida as $linea){
        echo $linea;
        echo "\n";
}

Y la salida la vemos a continuación:

Ejecutar comando con PHP usando exec en Linux
Ejecutar comando con PHP usando exec en Linux

Como puedes ver, estamos obteniendo la salida correctamente (si bien no es exactamente la misma, eso puede ser porque ls no es tan predecible y se supone que deberíamos usar find, pero bueno, ese no es el punto).

Ahora en Windows solo cambiaría el comando, que sería dir:

<?php
$comando = "dir";
exec($comando, $salida, $codigoSalida);
echo "El código de salida fue: " . $codigoSalida;
echo "\n";
echo "Ahora imprimiré las líneas de salida:";
foreach($salida as $linea){
        echo $linea;
        echo "\n";
}

Y la salida igualmente sería correcta. En este caso dir se comporta de manera idéntica ya sea desde PHP o desde la línea de comandos. Te repito que en el ejemplo anterior fue porque ls es un poco raro y no puedo exponer todo en este post, ya que no es el punto.

Invocar comando de Windows desde PHP con exec
Invocar comando de Windows desde PHP con exec

En este caso solo estamos invocando un comando desde PHP para listar los archivos del directorio actual, pero puede ser cualquier programa y cualquier comando.

Nota: en los ejemplos estoy ejecutando PHP desde un archivo. Esto no es obligatorio, ya que el código debería funcionar desde Apache u otro medio.

Nota 2: Obviamente el comando puede llevar argumentos, no se limita a una sola palabra.

La importancia del código de salida

Todos los programas (o los que están bien programados) deberían salir con un código de salida 0. Podemos usar este código de salida para ver si el comando fue ejecutado correctamente.

Veamos este ejemplo en donde el comando (dirs, y no dir) ni siquiera existe. Hay muchos códigos de salida, pero el 0 es el único que indica algo exitoso.

<?php
$comando = "dirs";
exec($comando, $salida, $codigoSalida);
if ($codigoSalida === 0) {
	echo "Ahora imprimiré las líneas de salida:";
	foreach ($salida as $linea) {
		echo $linea;
		echo "\n";
	}
} else {
	echo "Error ejecutando el comando. El código es: " . $codigoSalida;
}

Al ejecutarlo, tenemos lo siguiente:

Código de salida al ejecutar comando en PHP
Código de salida al ejecutar comando en PHP

En este caso no imprimimos la salida, ya que el código fue 1. De este modo podemos detectar errores, ya que aunque el programa exista, si hay un error, el código de salida no será 0.

Y así es como podemos invocar a comandos de la terminal desde PHP, ya sea en Windows o Linux.

Recuerda que si tienes problemas debes verificar que el programa sea accesible desde PHP, tengas los permisos necesarios, no haya problemas de rutas, etcétera.

Para terminar te dejo con más tutoriales de programación en PHP.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

1 comentario en “PHP: ejecutar un comando del sistema”

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *