Gestión de Versiones de PHP en Raspberry Pi
Contexto
Cuando tienes múltiples versiones de PHP instaladas en tu Raspberry Pi (especialmente usando el repositorio de Ondrej), necesitas poder cambiar entre ellas según los requisitos de cada proyecto.
Verificación inicial
Antes de configurar cualquier opción, verifica el estado actual:
# Ver versiones de PHP instaladas
ls /usr/bin/php*
# Ver paquetes PHP instalados
apt list --installed | grep php
# Verificar versión actual
php -v
Ejemplo: Instalación de PHP 8.3 (si no está presente)
Es un ejemplo, no es para un copy & paste
# Actualizar repositorios
sudo apt update
# Instalar PHP 8.3 y módulos esenciales
sudo apt install php8.3 php8.3-cli php8.3-common php8.3-curl php8.3-mbstring php8.3-mysql php8.3-xml
# Extensiones adicionales comunes
sudo apt install php8.3-gd php8.3-zip php8.3-intl php8.3-bcmath php8.3-sqlite3
Opción 1: Cambio Global con update-alternatives
Descripción
Cambia la versión predeterminada de PHP para todo el sistema usando el sistema de alternativas de Debian.
Configuración
# Registrar las versiones disponibles
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.3 83
sudo update-alternatives --install /usr/bin/php php /usr/bin/php8.4 84
# Seleccionar la versión deseada
sudo update-alternatives --config php
Uso
# Cambiar versión interactivamente
sudo update-alternatives --config php
# Verificar cambio
php -v
Ventajas
- Cambio persistente entre sesiones
- Fácil de cambiar cuando necesites
- Afecta a todos los scripts y herramientas que usan
php
Desventajas
- Cambio global afecta todo el sistema
- Puede romper scripts que dependen de una versión específica
- Requiere privilegios administrativos
Opción 2: Configuración por Sesión/Proyecto
Descripción
Configura temporalmente una versión específica de PHP solo para la sesión actual o proyecto específico.
Método A: Alias temporal
# Crear alias para la sesión actual
alias php='/usr/bin/php8.3'
# Verificar
php -v
# El alias se pierde al cerrar la terminal
Método B: Script de configuración de proyecto
Crea un archivo setup-php.sh
en tu directorio de proyecto:
#!/bin/bash
# setup-php.sh
echo "Configurando entorno PHP 8.3 para el proyecto"
# Crear aliases temporales
alias php='php8.3'
alias composer='php8.3 /usr/local/bin/composer'
# Verificar configuración
echo "Versión PHP activa:"
php8.3 -v
# Opcional: exportar variables de entorno
export PHP_VERSION=8.3
export PHP_BINARY=/usr/bin/php8.3
# Iniciar shell con configuración
bash
Uso:
# Ejecutar el script de configuración
source ./setup-php.sh
# O hacer ejecutable y ejecutar
chmod +x setup-php.sh
./setup-php.sh
Método C: Configuración en .bashrc del proyecto
# En el directorio del proyecto, crear .bashrc local
echo 'alias php="php8.3"' > .bashrc
echo 'alias composer="php8.3 /usr/local/bin/composer"' >> .bashrc
# Cargar configuración
source .bashrc
Ventajas
- No afecta el sistema globalmente
- Configuración específica por proyecto
- Fácil de revertir
Desventajas
- Configuración temporal (se pierde al cerrar terminal)
- Requiere configuración manual para cada proyecto
- Puede ser inconsistente entre sesiones
Opción 3: Uso Directo de Versión Específica
Descripción
Usa directamente los ejecutables específicos de cada versión sin cambiar configuraciones globales.
Uso en scripts
# En lugar de usar 'php', usar directamente la versión
php8.3 script.php
# Para servidor de desarrollo
php8.3 -S localhost:8000
# Para composer
php8.3 /usr/local/bin/composer install
Configuración de shebang en scripts PHP
#!/usr/bin/php8.3
<?php
// Tu código aquí
Crear wrapper scripts
Crea un directorio para scripts wrapper:
# Crear directorio para wrappers
mkdir -p ~/bin
# Crear wrapper para PHP 8.3
cat > ~/bin/php83 << 'EOF'
#!/bin/bash
exec /usr/bin/php8.3 "$@"
EOF
# Hacer ejecutable
chmod +x ~/bin/php83
# Añadir al PATH (en ~/.bashrc)
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
Uso:
# Usar wrapper
php83 script.php
php83 -S localhost:8000
Ventajas
- Control total sobre qué versión usar
- No requiere configuración global
- Explícito y claro en scripts
Desventajas
- Más verboso
- Necesitas recordar usar la versión correcta
- Herramientas como Composer pueden requerir configuración adicional
Recomendaciones por Caso de Uso
Para desarrollo personal con un proyecto principal
Usar Opción 1 (update-alternatives)
- Cambio fácil y persistente
- Bueno cuando trabajas principalmente con una versión
Para múltiples proyectos con diferentes versiones
Usar Opción 2 (configuración por proyecto)
- Flexibilidad máxima
- Cada proyecto mantiene su configuración
Para scripts de producción o automatización
Usar Opción 3 (uso directo)
- Máxima claridad y control
- Sin dependencias de configuración del sistema
Verificación y Troubleshooting
# Verificar versión activa
php -v
# Verificar módulos instalados
php -m
# Verificar configuración de PHP
php --ini
# Ver todas las versiones disponibles
ls -la /usr/bin/php*
# Verificar composer con versión específica
php8.3 /usr/local/bin/composer --version
Notas Importantes
-
Módulos y extensiones: Cada versión de PHP tiene sus propios módulos. Asegúrate de instalar las extensiones necesarias para cada versión.
-
Composer: Si usas Composer, puede necesitar configuración específica:
# Reinstalar composer para PHP 8.3 php8.3 -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php8.3 composer-setup.php
-
Servidor web: Si usas Apache o Nginx, la configuración del servidor web es independiente de la versión de CLI.
-
Herramientas de desarrollo: IDEs y editores pueden necesitar configuración específica para reconocer la versión correcta.
Esta documentación te permitirá elegir la estrategia más adecuada según tus necesidades específicas de desarrollo.
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.