PHP no es solo web: por qué tu próxima herramienta CLI debería estar escrita en PHP
Cuando escuchamos «PHP», la primera asociación son sitios web, WordPress e infinitos echo en el navegador. Pero PHP es una verdadera navaja suiza para el desarrollador. Una de sus características más subestimadas es la capacidad de crear utilidades CLI en PHP completas. Sí, esos programas de consola que ayudan a automatizar tareas rutinarias, analizar logs, generar informes y hacer la vida del ingeniero DevOps un poco más fácil.
En este artículo no solo hablaremos de teoría. Tomaremos y escribiremos desde cero varias aplicaciones de consola en PHP. Aprenderás cómo procesar argumentos de línea de comandos, colorear la salida, mostrar barras de progreso e incluso crear menús interactivos. Al final del artículo tendrás una plantilla lista que podrás usar inmediatamente en tus proyectos.
¿Por qué PHP para CLI? 3 argumentos contundentes
Antes de sumergirnos en el código, analicemos por qué usar PHP para crear utilidades CLI. Después de todo, existen Python, Node.js, Go…
- Ya sabes PHP. Si eres desarrollador web en PHP, no necesitas aprender una sintaxis nueva para escribir un script de respaldo de base de datos o despliegue.
- Ecosistema unificado. Puedes usar las mismas bibliotecas (a través de Composer), los mismos ORM y los mismos motores de plantillas. ¿Quieres un script que genere un informe PDF desde la BD? Por supuesto.
- Velocidad de desarrollo. Los scripts PHP se escriben muy rápido. Para utilidades simples es la opción ideal: no necesitas compilar, configurar el entorno, simplemente ejecutas y listo.
Por supuesto, para demonios de alta carga o utilidades de sistema complejas es mejor usar C o Rust. Pero para el 90% de las tareas cotidianas, PHP es perfecto.
Desde cero hasta tu primera utilidad CLI: ¡hola, mundo! en la terminal
Comencemos con lo más simple. Crea un archivo hello.php y escribe:
#!/usr/bin/env php<?php
echo "¡Hola, terminal!";La primera línea es el shebang. Le dice al sistema que este archivo debe ejecutarse con PHP. Sin ella, tendrías que escribir php hello.php cada vez, pero con ella, simplemente ./hello.php.
No olvides darle permisos de ejecución al archivo:
chmod +x hello.phpAhora ejecuta:
./hello.php¡Felicidades! Acabas de crear tu primera utilidad CLI en PHP. Es increíblemente simple, ¿verdad?
Trabajando con argumentos: haciendo la utilidad útil
Cualquier programa de consola serio debe poder aceptar argumentos. PHP proporciona dos arrays superglobales para esto: $argv y $argc.
$argv— array de argumentos. El primer elemento es el nombre del script.$argc— cantidad de argumentos.
Escribamos una calculadora simple: sumemos dos números pasados como argumentos.
Calculadora simple en PHP CLI
#!/usr/bin/env php<?php
if ($argc !== 3) { echo "Uso: {$argv[0]} <número1> <número2>"; exit(1);}
$a = (int)$argv[1];$b = (int)$argv[2];
echo "Suma: " . ($a + $b) . "";echo "Resta: " . ($a - $b) . "";echo "Producto: " . ($a * $b) . "";echo "Cociente: " . ($a / $b) . "";Ejecutamos:
./calc.php 10 5Salida:
Suma: 15Resta: 5Producto: 50Cociente: 2Pero esto es demasiado primitivo. En proyectos reales se necesitan argumentos con nombre (flags), como en git commit -m "mensaje". Para esto, PHP tiene la función getopt().
Argumentos con nombre con getopt()
#!/usr/bin/env php<?php
$shortOptions = "u