PHP no es solo para la web
\n\nCuando 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\nEn 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\nAntes 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
parallelopthreadsañaden soporte para multihilo. \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\nFundamentos del código PHP multiplataforma
\n\nLo 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+.
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\nEl 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.
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\nCreando una utilidad real: monitoreo de cambios en una carpeta
\n\nEscribamos algo útil: un script que vigile una carpeta y mues