Avere più versioni di PHP
Gestione Concorrente di Versioni PHP (SAPI mod_php e CLI) su Server Ubuntu
In ambienti di staging, durante le fasi di refactoring di applicativi legacy (es. vecchi CMS) o in scenari di transizione, è spesso necessario far coesistere versioni di PHP profondamente diverse sulla stessa infrastruttura.
Questo documento illustra le procedure di provisioning e lo switch di contesto (sia lato Web Server che lato Command Line Interface) tra la release di produzione moderna (PHP 8.3) e una versione legacy (PHP 5.6) su distribuzioni Ubuntu (dalla 20.04 LTS alla 24.04 LTS).
1. Configurazione del Repository Upstream
I repository Main di Ubuntu forniscono tipicamente una singola major release di PHP per ogni versione del sistema operativo. Per poter installare e gestire release multiple, è necessario integrare il PPA (Personal Package Archive) ufficiale mantenuto da Ondřej Surý, lo standard de facto per l'ecosistema PHP su Debian/Ubuntu.
# Aggiunta del PPA e aggiornamento degli indici dei pacchetti
sudo add-apt-repository -y ppa:ondrej/php sudo...
sudo apt update sudo...
2. Deployment dei Pacchetti Core e Moduli
Procediamo con l'installazione dei binari core per entrambe le versioni, dei moduli per Apache2 (mod_php) e delle estensioni più comuni necessarie per il funzionamento dei database e la manipolazione delle stringhe (es. mbstring, fondamentale per i CMS).
# Installazione di PHP 8.3, PHP 5.6 e relative estensioni di base
sudo apt install -y php8.3 php5.6 libapache2-mod-php8.3 libapache2-mod-php5.6 php8.3-mysql php5.6-mysql php8.3-mbstring php5.6-mbstring php8.3-xml php5.6-xml sudo...
L'installazione simultanea non genera conflitti, in quanto i binari vengono allocati in percorsi isolati (es. /usr/bin/php8.3 e /usr/bin/php5.6) e le configurazioni (file php.ini) risiedono in directory separate all'interno di /etc/php/.
3. Switch del Runtime per il Web Server (Apache)
L'utilizzo di mod_php in Apache permette di avere un solo modulo PHP attivo globalmente alla volta. Per modificare la versione utilizzata dal server web, è necessario disabilitare il modulo corrente, abilitare quello target e riavviare il demone HTTP.
Transizione verso l'ambiente Legacy (PHP 5.6):
# Disabilita il modulo 8.3, abilita il 5.6 e riavvia Apache
sudo a2dismod php8.3 sudo...
sudo a2enmod php5.6 sudo...
sudo systemctl restart apache2 sudo...
Transizione verso l'ambiente Moderno (PHP 8.3):
# Disabilita il modulo 5.6, abilita l'8.3 e riavvia Apache
sudo a2dismod php5.6 sudo...
sudo a2enmod php8.3 sudo...
sudo systemctl restart apache2 sudo...
4. Switch dell'Ambiente CLI (Command Line Interface)
Spesso, tool come Composer, WP-CLI o script di crontab necessitano di una specifica versione di PHP indipendente da quella del web server. Il sistema Debian/Ubuntu gestisce i symlink dei binari tramite il sistema update-alternatives.
Per impostare la versione globale di default per i comandi eseguiti da terminale:
Impostare PHP CLI su 5.6:
sudo update-alternatives --set php /usr/bin/php5.6 sudo...
Impostare PHP CLI su 8.3:
sudo update-alternatives --set php /usr/bin/php8.3 sudo...
Per verificare l'effettivo cambio di versione in console, eseguire php -v.
Buon lavoro

