09/06/2022
En el vasto universo del desarrollo web y la administración de servidores, PHP sigue siendo una de las herramientas más fundamentales y ampliamente utilizadas. Sin embargo, no todos los proyectos o entornos requieren la misma versión de este lenguaje. Desde aplicaciones legadas que dependen de versiones antiguas hasta nuevos desarrollos que aprovechan las últimas características, la necesidad de gestionar múltiples versiones de PHP en un mismo servidor es una realidad cotidiana para muchos profesionales. Este artículo explora cómo puedes tomar el control de tu entorno PHP, específicamente en la interfaz de línea de comandos (CLI) y cómo manejar sus configuraciones.

- La Importancia de Gestionar Múltiples Versiones de PHP
- Cambiando la Versión de PHP CLI con update-alternatives
- Entendiendo la Configuración PHP (php.ini)
- Preguntas Frecuentes sobre la Gestión de PHP
- ¿Por qué mi CLI y mi servidor web (Apache/Nginx) usan versiones diferentes de PHP?
- ¿Cómo puedo instalar múltiples versiones de PHP en mi servidor?
- ¿Es seguro usar update-alternatives?
- ¿Qué precauciones debo tomar al cambiar la versión de PHP CLI?
- ¿Puedo tener un php.ini diferente para cada versión de PHP y para cada SAPI (CLI, Apache, FPM)?
- ¿Cómo puedo depurar problemas de configuración de PHP?
- Conclusión
La Importancia de Gestionar Múltiples Versiones de PHP
La capacidad de ejecutar diferentes versiones de PHP en paralelo es una ventaja significativa. En lugar de estar forzado a actualizar o degradar tu entorno PHP globalmente para acomodar un proyecto específico, puedes mantener varias versiones instaladas y alternar entre ellas según sea necesario. Esto es crucial para la compatibilidad, permitiéndote trabajar en un proyecto antiguo que requiere PHP 7.4 mientras desarrollas una nueva aplicación que ya utiliza PHP 8.2, todo en el mismo servidor.
Cuando instalas una nueva versión de PHP, los archivos binarios de la interfaz de línea de comandos (CLI) suelen ubicarse en rutas predecibles. Por ejemplo, la CLI de PHP 8.0 podría instalarse en /usr/bin/php8.0, mientras que PHP 7.4 estaría en /usr/bin/php7.4, y así sucesivamente. Por defecto, el comando genérico php en tu terminal suele estar enlazado simbólicamente a la versión más reciente o a una versión predeterminada por el sistema. No obstante, esta vinculación puede ser modificada para adaptarse a tus necesidades específicas, dándote el poder de decidir qué versión de PHP se ejecuta cuando simplemente escribes php en tu terminal.
Cambiando la Versión de PHP CLI con update-alternatives
La herramienta update-alternatives es una utilidad poderosa en sistemas basados en Debian/Ubuntu que simplifica la gestión de comandos predeterminados cuando existen múltiples opciones para una misma función. Para PHP CLI, es la forma más directa y recomendada de cambiar la versión activa.
Uso Interactivo de update-alternatives
Para iniciar el proceso de selección interactiva, abre tu terminal y ejecuta el siguiente comando:
sudo update-alternatives --config phpUna vez ejecutado, este comando te presentará una lista numerada de todas las versiones de PHP CLI que tiene tu servidor instaladas y registradas con el sistema de alternativas. Verás una salida similar a esta:
Hay 3 alternativas que proveen `php` (proveyendo /usr/bin/php). Selección Ruta Prioridad Estado ------------------------------------------------------------ * 0 /usr/bin/php8.0 80 modo automático 1 /usr/bin/php7.4 74 modo manual 2 /usr/bin/php8.0 80 modo manual Pulse <Intro> para mantener la selección actual[*], o escriba el número de la selección: En este listado, el asterisco (*) indica la versión de PHP que está actualmente activa o por defecto para la ejecución en la terminal CLI. Para cambiar la versión, simplemente escribe el número correspondiente a la versión que deseas establecer como predeterminada y presiona Enter. Por ejemplo, si tu proyecto requiere PHP 7.4 y actualmente tienes PHP 8.0 activa (como en el ejemplo donde el * está en 8.0), y PHP 7.4 corresponde al número 1 en la lista, simplemente escribirías 1 y presionarías Enter. Esto es particularmente útil cuando, por ejemplo, tu sitio web en Apache2 está configurado para usar PHP 7.4 y deseas que tu CLI refleje esa misma versión para evitar inconsistencias en el desarrollo o la ejecución de scripts de mantenimiento.
Establecer la Ruta Directamente
Si prefieres una opción no interactiva, que puede ser útil para scripts de automatización o cuando ya sabes exactamente qué versión quieres usar, puedes establecer la ruta directamente. Esto es especialmente útil en entornos de integración continua o en scripts de aprovisionamiento de servidores.
sudo update-alternatives --set php /usr/bin/php7.4Este comando establece explícitamente /usr/bin/php7.4 como la ruta para el comando php. Asegúrate de que la ruta sea correcta y que la versión de PHP esté realmente instalada en esa ubicación. Después de ejecutar cualquiera de estos comandos, puedes verificar la versión activa con php -v para confirmar que el cambio se ha realizado correctamente.
Entendiendo la Configuración PHP (php.ini)
La configuración de PHP se rige principalmente por el archivo php.ini. Este archivo es el corazón de la configuración de PHP, dictando desde límites de memoria y tiempo de ejecución hasta la carga de extensiones y el manejo de errores. Cuando PHP se inicia, ya sea para servir una página web a través de un servidor como Apache o Nginx, o para ejecutar un script desde la CLI, busca el archivo php.ini en varias ubicaciones predeterminadas del servidor. Es importante destacar que las configuraciones de PHP pueden variar significativamente entre la versión de CLI y las versiones utilizadas por los servidores web (como Apache o PHP-FPM), ya que cada "Server API" (SAPI) puede tener su propio archivo php.ini.
Ubicaciones Comunes del Archivo php.ini
Las ubicaciones de los archivos php.ini pueden variar ligeramente dependiendo del sistema operativo, la versión de PHP y el SAPI (Server API) que esté en uso. Aquí hay algunas de las rutas más comunes:
| Sistema Operativo | Versión PHP / SAPI | Ruta Predeterminada de php.ini |
|---|---|---|
| Ubuntu / Debian | PHP 7.0 (Apache2) | /etc/php/7.0/apache2/php.ini |
| Ubuntu / Debian | PHP 7.0 (CLI) | /etc/php/7.0/cli/php.ini |
| Ubuntu / Debian | PHP 8.0 (Apache2) | /etc/php/8.0/apache2/php.ini |
| Ubuntu / Debian | PHP 8.0 (CLI) | /etc/php/8.0/cli/php.ini |
| CentOS / RHEL | Todas las versiones | /etc/php.ini |
| CentOS / RHEL | PHP-FPM (Ej: 7.x) | /etc/php-fpm.d/www.conf (puede incluir php.ini) |
Para saber exactamente qué archivo php.ini está utilizando tu PHP, puedes ejecutar php --ini en la CLI. Esto te mostrará la ruta del archivo de configuración cargado y cualquier directorio de configuración adicional. Para la versión web, puedes crear un archivo info.php con el contenido <?php phpinfo(); ?> y acceder a él desde tu navegador; busca la línea "Loaded Configuration File".
Configuración Local de php.ini para Proyectos
Además de los archivos php.ini globales, PHP permite la creación de archivos de configuración locales que pueden sobrescribir ciertas directivas. Puedes crear un nuevo archivo php.ini (o con cualquier otro nombre que PHP reconozca, como .user.ini para ciertos SAPI) que contenga solo la configuración PHP que necesitas cambiar para un proyecto o un script específico. Este archivo debe colocarse en el mismo directorio que el script PHP que deseas afectar.

Por ejemplo, si tienes un script mi_script.php en el directorio /var/www/mi_proyecto/ y necesitas aumentar el límite de memoria solo para ese script, puedes crear un archivo /var/www/mi_proyecto/php.ini con el siguiente contenido:
memory_limit = 256M max_execution_time = 120Cuando mi_script.php se ejecute, PHP cargará primero el php.ini global y luego aplicará las configuraciones definidas en el php.ini local, sobrescribiendo las directivas duplicadas. Sin embargo, es crucial entender una limitación importante: esta configuración local solo se aplica a los scripts que residen en el mismo directorio que el archivo php.ini. Los subdirectorios no se ven afectados automáticamente. Esto significa que si tienes scripts en /var/www/mi_proyecto/subdirectorio/, deberías colocar un nuevo php.ini en ese subdirectorio si deseas aplicar configuraciones específicas a sus scripts. Por lo tanto, el archivo php.ini recién creado debe introducirse en cada directorio de trabajo donde desees que sus configuraciones surtan efecto.
Este enfoque es excelente para mantener configuraciones específicas de un proyecto sin afectar a otras aplicaciones en el mismo servidor, lo que mejora la compatibilidad y la modularidad de tu entorno.
Preguntas Frecuentes sobre la Gestión de PHP
¿Por qué mi CLI y mi servidor web (Apache/Nginx) usan versiones diferentes de PHP?
Es una situación muy común. La versión de PHP que tu terminal (CLI) usa se define por el enlace simbólico del comando php, que puedes gestionar con update-alternatives. Por otro lado, la versión de PHP que tu servidor web usa se configura a nivel del servidor web (por ejemplo, en la configuración de un Virtual Host de Apache, o en un bloque server de Nginx que apunta a un socket PHP-FPM). Cada SAPI (Server API, como CLI, Apache2 Handler, FPM) puede tener su propia configuración y, por ende, su propia versión de PHP activa. Esto permite tener, por ejemplo, PHP 8.2 para tu desarrollo en CLI y PHP 7.4 para tu sitio web de producción.
¿Cómo puedo instalar múltiples versiones de PHP en mi servidor?
La forma más sencilla y recomendada es usar los repositorios de paquetes de tu sistema operativo. En Ubuntu/Debian, puedes añadir repositorios de terceros como Ondrej Sury's PPA (sudo add-apt-repository ppa:ondrej/php) que facilitan la instalación de múltiples versiones (ej. sudo apt install php7.4 php8.0 php8.2). En CentOS/RHEL, puedes usar repositorios como EPEL y Remi. Una vez instaladas, update-alternatives las detectará.
¿Es seguro usar update-alternatives?
Sí, es una herramienta estándar del sistema para gestionar enlaces simbólicos y es completamente segura cuando se usa correctamente. Te permite cambiar la versión de PHP CLI de manera controlada y reversible. Sin embargo, siempre es una buena práctica entender el comando antes de ejecutarlo, especialmente con sudo.
¿Qué precauciones debo tomar al cambiar la versión de PHP CLI?
- Verifica la compatibilidad: Asegúrate de que los scripts que vas a ejecutar con la nueva versión de PHP sean compatibles con ella. Las versiones mayores de PHP (ej. de 7.x a 8.x) a menudo introducen cambios significativos que pueden romper la compatibilidad.
- Reinicia servicios (si aplica): Aunque cambiar la versión de PHP CLI no suele requerir reiniciar servicios del servidor web, si estás ejecutando scripts que interactúan con servicios que dependen de la versión de PHP (como Composer, o un script que inicia un proceso PHP-FPM), asegúrate de que todo esté alineado.
- Confirma el cambio: Siempre ejecuta
php -vdespués de un cambio para asegurarte de que la versión deseada está activa.
¿Puedo tener un php.ini diferente para cada versión de PHP y para cada SAPI (CLI, Apache, FPM)?
Absolutamente. De hecho, es el comportamiento predeterminado en muchos sistemas operativos. Cada SAPI (CLI, Apache2, FPM) para una versión específica de PHP tendrá su propio directorio de configuración y, por lo tanto, su propio php.ini. Por ejemplo, en Ubuntu, tendrás /etc/php/8.0/cli/php.ini, /etc/php/8.0/apache2/php.ini y /etc/php/8.0/fpm/php.ini. Esto te permite optimizar la configuración de PHP específicamente para su caso de uso: una configuración para scripts de línea de comandos (que a menudo necesitan más memoria o tiempo de ejecución), y otra para el servidor web (optimizada para peticiones HTTP).
¿Cómo puedo depurar problemas de configuración de PHP?
La herramienta más útil es phpinfo() para el entorno web y php -i para la CLI. Ambos comandos muestran una gran cantidad de información sobre la configuración actual de PHP, incluyendo el archivo php.ini cargado, las extensiones habilitadas, los límites de memoria, etc. Si sospechas que una directiva no se está aplicando correctamente, verifica su valor en la salida de phpinfo() o php -i y asegúrate de que el archivo php.ini correcto esté siendo leído.
Conclusión
La gestión de múltiples versiones de PHP y sus configuraciones es una habilidad esencial para cualquier desarrollador o administrador de sistemas que trabaje con este lenguaje. Herramientas como update-alternatives ofrecen un control preciso sobre la versión de PHP activa en la CLI, mientras que una comprensión profunda del archivo php.ini y sus ubicaciones te permite afinar el comportamiento de PHP tanto para scripts de línea de comandos como para aplicaciones web. Al dominar estas técnicas, puedes asegurar la compatibilidad de tus proyectos, optimizar el rendimiento y mantener un entorno de desarrollo y producción flexible y robusto. La capacidad de alternar entre versiones y personalizar configuraciones a nivel de proyecto o globalmente te brinda una flexibilidad invaluable, asegurando que siempre tengas la herramienta adecuada para el trabajo.
Si quieres conocer otros artículos parecidos a Dominando PHP CLI: Gestión de Versiones y Configuración puedes visitar la categoría Librerías.
