saluzzo banner animated

Avere più versioni di PHP

php elephant

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