Installer PHP7.0 et PHP7.0-FPM sur Raspbian

php7.0 logo

Dans un précédent article j’ai expliqué comment installer PHP7 sur Rasbian Jessie. Actuellement la version de Rasbian qui est disponible sur leur site officiel est Stretch. Dans cet article je vais vous montrer comment installer PHP7.0 sur Rasbian Stretch. La méthode est identique au tuto pour l’installation de PHP7.1 et PHP7.2 sur Debian, à savoir utiliser le dépôt de Ondrey Sury.

En fait d’article je vais vous montrer pourquoi seul l’installation de PHP7.0 n’est possible sur Rasbian.

Choix du dépot

Nous allons utiliser le dépôt de Ondrey Sury.

Commencer par passer sudo sur votre machine pour ajouter la nouvelle source des paquets PHP, pour ensuite les installer.

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

L’installation du dépôt n’est pas forcément obligatoire, mais il permet d’avoir une version plus récente de php7.0 comparé à celle fournit de base par les dépôt de raspbian, comme vous pouvez le constater sur la capture suivante (commande apt-cache policy php7.0 ). Certes il ne s’agit que de version mineure. Version 7.0.28 vs 7.027 :

apt-cache policy php7.0

 

Installation de PHP7.0

Nous allons installer PHP7.0, l’ensemble des principales dépendances nécessaires et le paquet FPM.

apt-get install php7.0 php7.0-opcache libapache0-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json php7.0-gd  php7.0-intl php7.0-mbstring php7.0-xml php7.0-zip php7.0-fpm php7.0-readline

Redémarrons Apache

service apache2 install

 

A ce stade PHP7.0 est installé, vous pouvez vérifier l’installation via un phpinfo à mettre dans un fichier PHP

<?php

phpinfo();

phpinfo php7.0

Vérification de la version cli

La commande php -v  doit vous donner le résultat suivant :

php -v

Activation de PHP7.0-FPM

Le module PHP a l’inconvénient de surcharger le serveur, car chaque process Apache est rattaché à un moteur PHP complet. L’utilisation de PHP-FPM permet de résoudre ce problème. En effet PHP-FPM est lancé en tant que processus séparé du serveur http. Il peut donc être lancé avec un (ou plusieurs) comptes, différents de celui utilisé par le serveur http, afin d’améliorer la sécurité, ou d’utiliser des paramétrages PHP différents selon les différents pools de connexions utilisés.

Attention l’ajout de PHP-FPM ne semble fonctionner correctement qu’à partir de la version d’Apache 2.4.9, avant cette version, Apache ne pouvait pas utiliser les sockets Unix pour communiquer correctement avec le serveur PHP-FPM

Il faut donc activer le module proxy_fcgi, setenvif, désactiver le module PHP, et activer la conf PHP7.0-fpm

a2enmod proxy_fcgi setenvif
a2enconf php7.0-fpm
a2dismod php7.0

Puis allons redémarrer les services apache2 et php7.-fpm

systemctl restart apache2

systemctl restart php7.0-fpm

Si vous réafficher votre phpinfo, vous verrez que PHP7.0-FPM est bien activé et fonctionne.

phpinfo php7.0-fpm

 

Pourquoi PHP7.0 et pas une version supérieure ?

Il semblerait que le développement de Rasbian Stretch soit stoppé, et qu’ils concentrent tous leur effort sur la version de Buster. La mise à jour des versions de PHP supérieure à 7.0 ne semble pas être porté sur Rasbian, il faudra vous contenter de la version 7.0.

Si vous tenter d’installer la version 7.1 ou 7.2 vous obtiendrez un message d’erreur suivant :

Les paquets suivants contiennent des dépendances non satisfaites :
php7.2 : Dépend: libapache2-mod-php7.2 mais il n'est pas installable ou
php7.2-fpm mais il n'est pas installable ou
php7.2-cgi mais il n'est pas installable
Dépend: php7.2-common mais il n'est pas installable
E: Impossible de corriger les problèmes, des paquets défectueux sont en mode « garder en l'état ».

En effet avec un apt-cache policy php7.2 vous constaterez que le paquet est bien présent sur le dépôt que l’on vient d’ajouter

apt-cache policy php7.2

Par contre si vous faites un apt-cache show php7.2 on peut voir que le paquet php7.2 a des dépendances (libapache2-mod-php7.2 | php7.2-fpm | php7.2-cgi, php7.2-common):

apt-cache show php7.2

Si on cherche tous les paquets dont le nom contient php7.2 on remarque que les dépendances ne sont pas disponible : apt-cache search php7.2 :

apt-cache search php7.2

Alors que si on lance la même recherche avec php7.0 toutes les dépendances sont présentes. (J’ai rajouté un filtre pour n’afficher que les résultats pertinents) :

apt-cache search php7.0