PHP fuera del navegador: Cómo crear aplicaciones CLI multiplataforma

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

PHP no es solo para la web

\n\n

Cuando alguien menciona «PHP», la mayoría piensa en el feed de noticias de Facebook, el carrito de compras de una tienda online o el backend de WordPress. Es lógico: el lenguaje nació como herramienta para la web. Pero, ¿y si te dijera que PHP también es excelente para tareas que normalmente se le asignan a Python, Bash o Go? Hablamos del desarrollo multiplataforma con PHP: la creación de utilidades que funcionan en Windows, Linux y macOS sin tener que reescribir el código.

\n\n

En este artículo no te enseñaremos a maquetar formularios. Te mostraremos cómo escribir un gestor de archivos de consola, un analizador de logs y un sistema de monitoreo de carpetas, todo en PHP puro, sin un solo servidor web. Aprenderás a sortear los obstáculos de los diferentes sistemas operativos y a escribir código que se ejecute igual en todas partes.

\n\n

¿Listo? Abre tu terminal y prepárate para sorprenderte con las capacidades del viejo y querido PHP.

\n\n

¿Por qué PHP para tareas multiplataforma? Tres argumentos de peso

\n\n

Antes de meternos en el código, analicemos por qué usar PHP para utilidades de escritorio y servidor. Python tiene Django y Flask, Node.js tiene Express. ¿Para qué queremos PHP?

\n\n
    \n
  • Disponibilidad generalizada. PHP está instalado en casi todos los hosting compartidos y en el 80% de los servidores del mundo. Si creas una herramienta de administración, es muy probable que la máquina de destino ya tenga PHP. No necesitas instalar un runtime adicional.
  • \n
  • Baja barrera de entrada para desarrolladores web. Ya conoces la sintaxis, las funciones para trabajar con cadenas y arrays. No tienes que aprender un nuevo lenguaje para automatizar tareas rutinarias en el servidor.
  • \n
  • Biblioteca estándar muy completa. PHP tiene todo lo necesario para trabajar con archivos, procesos, sockets de red y archivos zip. Y extensiones PECL como parallel o pthreads añaden soporte para multihilo.
  • \n
\n\n

Por supuesto, PHP no es ideal para aplicaciones con interfaz gráfica (aunque existe PHP-GTK). Pero para utilidades de consola y demonios, es una herramienta madura y estable. Veamos cómo escribir este código correctamente.

\n\n

Fundamentos del código PHP multiplataforma

\n\n

Lo primero que debes recordar: los separadores de ruta. En Linux es /, en Windows es \\. PHP proporciona la constante DIRECTORY_SEPARATOR, pero es aún más cómodo usar la función DIRECTORY_SEPARATOR o la barra universal / — Windows la entiende perfectamente desde PHP 7+.

\n\n

Trabajo correcto con rutas

\n\n
<?php\n// Mal — barra fija\n$path = '/var/log/errors.log'; // Fallará en Windows\n\n// Bien — usamos DIRECTORY_SEPARATOR\n$path = 'var' . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . 'errors.log';\n\n// Excelente — usamos / y realpath()\n$path = __DIR__ . '/logs/errors.log';\necho $path; // Funciona en ambos SO\n?>\n
\n\n

El segundo punto importante es la codificación. En Windows, la consola suele usar CP866 por defecto, mientras que los scripts PHP usan UTF-8. Para mostrar caracteres especiales en Windows, usa la función mb_convert_encoding() o establece la codificación con chcp 65001 al inicio del script.

\n\n

Ejemplo: lectura multiplataforma de un archivo

\n\n
<?php\nfunction readLogFile(string $filename): string {\n    // Verificamos que el archivo exista\n    if (!file_exists($filename)) {\n        throw new RuntimeException("Archivo $filename no encontrado");\n    }\n    \n    // Leemos el contenido\n    $content = file_get_contents($filename);\n    \n    // Detectamos el SO y convertimos la codificación para la salida\n    if (PHP_OS_FAMILY === 'Windows') {\n        $content = mb_convert_encoding($content, 'CP866', 'UTF-8');\n    }\n    \n    return $content;\n}\n\necho readLogFile('logs/app.log');\n?>\n
\n\n

Creando una utilidad real: monitoreo de cambios en una carpeta

\n\n

Escribamos algo útil: un script que vigile una carpeta y mues

Blogs

Book Recommendations