PHP para Shell, Utilidades practicas.
Todo el mundo sabe del potencial que tiene PHP para la programación de páginas web, pero también lo fantástico que puede llegar a ser para crear programas multiplataformas para Shell. Vamos a ver algunas cosas que podemos hacer con PHP en línea de comandos y que puede ser desconocidos para algunos.
1.- Ejecutar un Script
Podemos crearnos nuestros programas en un archivo php y luego ejecutarlo por medio del binario de php. Vamos a ver como ejecutarlo en Linux y Windows.
En Linux deberíamos de ejecutar:
$ php test.php
Mientras que en Windows sería:
> php.exe test.php
Al ejecutar esto, se mostraría por pantalla lo que contenga el fichero test.php.
2.- Hacer que el script sea ejecutable
En Windows tendremos que asociar la extensión .php al binario php.exe. De esa forma, al hacer doble clic sobre un fichero, este se ejecutará. Sin embargo, si quisiéramos que se pudiera ejecutar desde la consola, tendríamos que crear un fichero por lotes .bat que realice la llamada.
@echo OFF "C:phpphp.exe" test.php
En sistemas Unix, esto es más sencillo, tenemos que añadir en la primera línea la ruta al binario que ejecuta al script y posteriormente le damos permisos de ejecución. El fichero quedaría de la siguiente forma.
#!/usr/bin/php
3.- Pasar parámetros al programa
Al igual que todos los comandos que nos podemos encontrar en consola, podríamos necesitar la creación de algún php que necesitara ciertos parámetros. Esto no es problema, pero hay que ver varios casos.
Si es en linux y el archivo no tiene permisos, entonces los parámetros hay que pasáselos detrás del carácter “-”, para evitar que el binario de php piense que son suyos.
$ php test.php — parametro1 parametro2
Si el archivo tiene permisos, entonces no hace falta el guión
$ ./test.php parametro1 parametro2
En Windows, como hemos visto más arriba, había que utilizar un fichero por lotes, por lo que ahora quedaría de esta forma:
@echo OFF "C:phpphp.exe" test.php %*
Ahora para recuperar los parámetros introducidos podemos hacer uso de las variables “$argc” y “$argv” que tiene PHP para este fin.
4.- Usar PHP como consola interactiva
Como en otros lenguajes, en php se puede meter los comandos en una consola y esta los ejecuta al vuelo. Sólo hay que poner el parámetro “-a”. Un ejemplo sería:
$ php -a Interactive shell php > echo 5+8; 13 php > function sumarDos($n) php > { php { return $n + 2; php { } php > var_dump(sumarDos(2)); int(4) php >
Esta consola te permite el autocompletado de función mediante el uso del tabulador.
5.- Ejecutar línea de código PHP al momento
Hay que casos en los que queremos ejecutar código php al momento, pues esto nos lo permite PHP mediante el modificador “-r”. Si queremos mostar el md5 del contenido de un fichero, se haría de la siguiente forma:
php -r 'echo md5(file_get_contents("fichero.txt"));'
El comando a ejecutar hay que ponerlo dentro de las comillas simples.
6.- Pasar contenidos a PHP por tuberías
Podemos hacer que el resultado de ejecutar un comando, le llegue a un PHP que sea el encargado de ejecutarlo. Para ello, se debe de consultar la entrada estándar. Para ello disponemos de tres constantes:
- STDIN – Stream a la entrada estándar.
- STDOUT – Stream a la salida estándar.
- STDERR – Stream a la salida de errores.
Un ejemplo de uso, podría ser:
echo "hola mundo" | php -r 'echo strlen(fgets(STDIN));'
La cadena que imprime echo, se le pasa al php y nos muestra la longitud.
7.- Mostrar un fichero en PHP sin comentarios ni espacios
El modificador “-w” elimina todos los caracteres en blanco innecesarios y todos los comentarios, mostrando el código sin espacio, minimizando así el tamaño del fichero.
$ php -w fichero.php
8.- Consultar documentación desde consola
Desde consola podemos consultar la documentación de cualquier función de php que necesitemos utilizar, pero para ello, es necesario que la versión de php esté compilada con la extensión Refelction. Esto nos da 4 opciones:
- “–rf” – Muestra información de una función o de un método de una clase.
- “–rc” – Muestra información de una clase (sus métodos, atributos, constantes…).
- “–re” – Muestra información de una extensión (directivas .ini, funciones, constantes, clases, etc).
- “–ri” – Muestra información sobre la configuración de una extensión. Esto es, lo mismo que devuelve phpinfo() para cada extensión. Si queremos ver la información general, usaremos “main” como nombre de extensión.
Veamos un ejemplo:
$ php --rf md5 Function [ function md5 ] { - Parameters [2] { Parameter #0 [ $str ] Parameter #1 [ $raw_output ] } }
9.- Decorar la sintaxis de nuestro código
PHP nos ofrece una forma sencillísima de generar una versión HTML de nuestro código, coloreando y destacando cada parte. Sólo tendremos que ejecutarlo con el modificador “-w”. Una vez hecho esto, podremos exportarla al formato que queramos (PDF, Word, XHTML, etc). Muy útil cuando queremos imprimir un código fuente.
$ php -w fichero.php
10.- Definir código inicial, final y para cada línea
PHP nos ofrece algo parecido a los comando sed o awk, pero para ello hay que utilizar 4 modificadores:
- “-B” – Código PHP a ejecutar antes que todo lo demás.
- “-F” – Código PHP a ejecutar cuando finalice todo lo demás.
- “-R” – Código PHP a ejecutar por cada línea. Tendremos $argn con la línea que se está procesando, y $argi con el número de línea.
- “-F” – Fichero con el código PHP a ejecutar por cada línea.
Veamos un ejemplo muy didáctico y muy poco útil de la documentación de PHP. Supongamos que queremos contar el número de líneas de un proyecto. Accedemos a su directorio y ejecutamos lo siguiente:
$ find . | php -B '$lineas=0;' -R '$lineas += count(@file($argn));' -E 'echo "Total de líneas: $lineasn";'