Upgrade PHP

La prochaine version de Dotclear requiert PHP > 7.4, hors chez moi j'avais une 7.3.xx. C'est l'occasion de faire un petit pense bête sur la manière de faire l'upgrade.

20211204-02.jpg, déc. 2021
Oriane - La panicière - 12/2021

On part d'une installation Debian avec un serveur Apache2 et on se connecte au surveur web en SSH avec un utilisateur sudo. On commence par mettre à jour la distribution avec la commande :
 

sudo apt update & upgrade -y

Ensuite on regarde ce qui est installé actuellement et on récupère cette liste :
 

sudo dpkg -l | grep php

ii  libapache2-mod-php            2:7.3+69                     all          server-side, HTML-embedded scripting language (Apache 2 module) (default)
ii  libapache2-mod-php7.3         7.3.31-1~deb10u1             amd64        server-side, HTML-embedded scripting language (Apache 2 module)
ii  php                           2:7.3+69                     all          server-side, HTML-embedded scripting language (default)
ii  php-cli                       2:7.3+69                     all          command-line interpreter for the PHP scripting language (default)
ii  php-common                    2:69                         all          Common files for PHP packages
ii  php-curl                      2:7.3+69                     all          CURL module for PHP [default]
ii  php-gd                        2:7.3+69                     all          GD module for PHP [default]
ii  php-gmp                       2:7.3+69                     all          GMP module for PHP [default]
ii  php-intl                      2:7.3+69                     all          Internationalisation module for PHP [default]
ii  php-mbstring                  2:7.3+69                     all          MBSTRING module for PHP [default]
ii  php-mysql                     2:7.3+69                     all          MySQL module for PHP [default]
ii  php-xml                       2:7.3+69                     all          DOM, SimpleXML, WDDX, XML, and XSL module for PHP [default]
ii  php-xmlrpc                    2:7.3+69                     all          XMLRPC-EPI module for PHP [default]
ii  php-zip                       2:7.3+69                     all          Zip module for PHP [default]
ii  php7.3                        7.3.31-1~deb10u1             all          server-side, HTML-embedded scripting language (metapackage)
ii  php7.3-cli                    7.3.31-1~deb10u1             amd64        command-line interpreter for the PHP scripting language
ii  php7.3-common                 7.3.31-1~deb10u1             amd64        documentation, examples and common module for PHP
ii  php7.3-curl                   7.3.31-1~deb10u1             amd64        CURL module for PHP
ii  php7.3-gd                     7.3.31-1~deb10u1             amd64        GD module for PHP
ii  php7.3-gmp                    7.3.31-1~deb10u1             amd64        GMP module for PHP
ii  php7.3-intl                   7.3.31-1~deb10u1             amd64        Internationalisation module for PHP
ii  php7.3-json                   7.3.31-1~deb10u1             amd64        JSON module for PHP
ii  php7.3-mbstring               7.3.31-1~deb10u1             amd64        MBSTRING module for PHP
ii  php7.3-mysql                  7.3.31-1~deb10u1             amd64        MySQL module for PHP
ii  php7.3-opcache                7.3.31-1~deb10u1             amd64        Zend OpCache module for PHP
ii  php7.3-readline               7.3.31-1~deb10u1             amd64        readline module for PHP
ii  php7.3-xml                    7.3.31-1~deb10u1             amd64        DOM, SimpleXML, WDDX, XML, and XSL module for PHP
ii  php7.3-xmlrpc                 7.3.31-1~deb10u1             amd64        XMLRPC-EPI module for PHP
ii  php7.3-zip                    7.3.31-1~deb10u1             amd64        Zip module for PHP

On voit qu'on a effectivement la version 7.3 de PHP. IL va falloir la mettre à jour vers la version suivante. Pour cela il faut récupérer une liste de paquetages que le système saura installer. Ici on enchaine plusieurs commandes qui installent de quoi récupérer la liste des paquetages php disponible pour le serveur, on ajoute le lien dans le gestionnaire de paquetages et on met à jour la liste :

sudo apt install apt-transport-https lsb-release ca-certificates curl -y
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg 
sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'

Voila, le système de paquetages du serveur va svoir installer ce qu'on veut. On commence par PHP lui même :

sudo apt install php7.4 php7.4-common php7.4-cli

D'après la liste de ce qu'on avait d'installer sur le serveur au début de ce billet, on installe les paquetages correspondant : 
Attention la liste ici est juste pour l'exemple, votre serveur n'a pas forcément ces paquetage et en a peut-être d'autres en plus.

sudo apt install php7.4-curl php7.4-gd php7.4-gmp php7.4-intl php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-xml php7.4-xmlrpc php7.4-zip

Enfin on installe le module PHP d'apache2 :
Normalement il va être automatiquement installer en dépendance des paquetages précédents.

sudo apt install libapache2-mod-php7.4

On nettoie les paquetages qui sont désormais inutiles :

sudo apt purge php7.3 php7.3-common

On désactive l'ancien module et on active le nouveau :
Normalement l'ancien devrait déjà avoir disparu avec la commande purge.

sudo a2dismod php7.3
sudo a2enmod php7.4

Enfin on redémarre Apache :

sudo service apache2 restart

Voila un beau serveur en php 7.4.

Les commandes restent les mêmes pour monter jusqu'à la dernière version (actuellement 8.1) de php. A ceci près qu'il faudra peut-être reconfigurer le fichier ini de php (/etc/php/x.x/apache2/php.ini) Il a également fallu que je désactive l'extension php xmlrpc (ajouter ; au début de la ligne du fichier /etc/php/8.1/apache2/conf.d/20-xmlrpc.ini) pour la version actuelle de Dotclear qui contient déjà des classes faisant la même chose. 

Haut de page