Ejecutar código Shell Script desde PHP en Linux

main-qimg-a749c14be23fd48672b8922f28dc3be6En el siguiente artículo les mostraré una manera muy sencilla de ejecutar código shell script desde php, ya sea que tengamos todo un script en un archivo por separado o la ejecución de un simple comando Linux.

Primero veamos como ejecutar un simple comando linux desde un archivo PHP. He creado una carpeta en mi servidor llamada shellphp, dentro de esa carpeta creo un archivo php y lo llamo shell.php y lo editamos colocando lo siguiente:

<?php
$comando = shell_exec(‘lsb_release -a‘);
echo «<pre>$comando</pre>»;
?>

en mi caso, este archivo lo tengo ubicado en:

/var/www/shellphp/shell.php

Vamos al navegador y ejecutamos ese archivo shell.php para ver que nos resulta:

http://localhost/shellphp/shell.php

Nota: es muy importante que estos archivos tengan permisos de ejecución. Si no sabes como asignar permisología a los archivos y directorios en linux, visita mi artículo: Permisología en archivos y directorios en Linux

La palabra reservada de PHP shell_exec, lo que hace es ejecutar instrucciones Linux y devuelve el resultado de esta o estas instrucciones en una cadena. Las etiquetas < pre > lo que haces es mostrar  línea por línea el resultado de esa instrucción linux.

En este ejemplo, le indico a PHP que ejecute el comando Linux (lsb_release -a) que muestra la versión del sistema operativo que tengo instalada en mi maquina, en respuesta a mi ejemplo, obtengo como resultado:

Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy

Ahora bien, vamos a complicar un poco más la cosa, supongamos que tenemos un archivo con instrucciones programadas en shell script y necesitamos ejecutarlo desde php, pues fácil..

Creamos un archivo llamado comando.sh por ejemplo, y colocamos lo siguiente como ejemplo:

#!/bin/sh
echo «Hola esto es un mensaje en el codigo de shell script<br>»;
echo «comando n 1:<br>»;
date
echo «<br>»;
echo «comando n 2:<br>»;
lsb_release -a

Este script lo único que hace es mostrarme unos mensajes en el navegador, pero ejecuta los comandos linux date (muestra la fecha actual de la maquina) y lsb_release -a (muestra el sistema operativo instalado en la maquina) y el resultado los muestra como una cadena.

Luego el archivo shell.php queda de esta manera:

<?php
$comando = shell_exec(‘sh comando.sh‘);
echo «<pre>$comando</pre>»;
?>

Observen que en esta ocasión, no coloco el comando linux directamente, sino que mando a ejecutar el archivo comando.sh tal y como lo haríamos naturalmente desde la terminal de linux. Al probar en el navegador, tendrémos:

Hola esto es un mensaje en el codigo de shell script
comando n 1:
Wed Apr 10 14:54:23 -04 2019

comando n 2:
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.5 (wheezy)
Release:	7.5
Codename:	wheezy

El archivo comando.sh en este ejemplo, esta ubicado en la misma carpeta que el archivo shell.pp quien es el que lo ejecuta, bien este archivo sh podría estar ubicado en otra carpeta distinta y fuera de nuestro proyecto php, basta con colocar la ruta específica de este archivo, por ejemplo, supongamos el archivo comando.sh esta dentro de mi directorio personal /home/andry/:

<?php
$comando = shell_exec(‘sh /home/andry/comando.sh‘);
echo «<pre>$comando</pre>»;
?>

Repito es muy importante que los archivos tengan permisos de ejecución. Esta metodología es una practica muy útil, ya que podríamos permitir a un usuario administrador de un sistema, que desde el mismo menú de un aplicativo, tenga una opción de realizar respaldos de APP y BD desde el mismo sistema, estos respaldos serían programados en shell script dentro de un archivo sh por ejemplo, y estos ser ejecutados desde un archivo .php, el cual sería invocado desde un menú html en una aplicación web  =D … genial no? No estamos inventando la rueda ni nada por el estilo, pero si facilitarle las cosas a los usuarios administradores de un sistema o aplicativo web, además de agregarle algún atractivo a nuestras aplicaciones.

En fin, se pueden hacer múltiples cosas con estas herramientas, eso ya queda a nuestra disposición. Espero que nos sirva mucho este artículo!

Deja un comentario