2.Installation de PHP

2.3.sous Linux

2.3.3.A partir des sources

2.3.3.1.Introduction

Avant de procéder à l'installation de PHP, vous devez déterminer si vous souhaitez utiliser PHP dans le cadre d'un site web (tout en conservant la possibilité de l'utiliser en ligne de commande - c'est l'option la plus courante) ou bien uniquement en ligne de commande.
Dans ce chapitre, nous allons décrire la procédure pour installer PHP pour le web mais nous vous indiquerons les étapes à ignorer si seul PHP en ligne de commande vous intéresse.
Nous allons donc:
  • Voir où (et comment) récupérer les sources d'Apache et PHP
  • Détailler la procédure de compilation et installation "générique" sous Linux
  • Appliquer cette procédure à Apache/httpd puis PHP.

2.3.3.2.Téléchargement des sources du serveur web et de PHP

Les sources du serveur web Apache/httpd sont disponibles à l'adresse [https://httpd.apache.org/download.cgi#apache24] (évidemment inutiles pour une utilisation de PHP en ligne de commande). Vous avez le choix entre plusieurs versions du serveur. Si vous n'avez pas de contrainte particulière prenez la dernière version (the latest available version) qui apparaît en haut de l'écran. Puisque nous souhaitons disposer des sources, c'est sur les liens en face de "Source:" qu'il convient de cliquer. Vous pouvez aussi bien prendre la version .tar.bz2 que .tar.gz.
Les sources de PHP, quant à eux, sont disponibles à l'adresse [http://www.php.net/downloads.php]. Là, encore, si vous n'avez pas de contrainte particulière prenez la dernière version affichée en haut de la page. Elle est également disponible en .tar.bz2 et .tar.gz.
Nous vous invitons à télécharger ces fichiers dans un espace temporaire. En ce qui nous concerne nous avons pris les versions .bz2 que nous avons téléchargées sous /tmp/.
Cette opération de téléchargement peut également se faire directement en ligne (à condition de connaître les versions disponibles et de disposer des URLs actualisées). Ici, pour la version 2.4.48 de Apache/httpd et 8.0.6 de PHP nous pouvons taper les commandes suivantes:
$ cd /tmp
$ wget https://apache.mediamirrors.org//httpd/httpd-2.4.48.tar.bz2
$ wget https://www.php.net/distributions/php-8.0.6.tar.bz2
rem
  • Pour cela, vous devez évidemment disposer de wget. Ce dernier peut être installé sous Debian et Ubuntu via # apt-get update && apt-get install wget et sous Fedora via # dnf install wget (pensez à faire précéder chacune des instructions de sudo si vous n'avez pas la possibilité de vous connecter en tant que root).

2.3.3.3.Compilation sous Linux

2.3.3.3.1.Introduction

Que ce soit pour compiler/installer le serveur web Apache/httpd ou pour compiler/installer PHP le principe est le même (et est identique à bon nombre des procédures de compilation/installation sous Linux).
Il s'agit de:
  1. Décompacter les sources
  2. Lancer le script qui va vérifier et configurer l'environment de compilation
  3. Passer à la compilation proprement dite
  4. Procéder à l'installation.
En soit, il ne s'agit pas d'une opération vraiment délicate... à condition d'être en mesure de répondre aux attentes en terme d'environnement de compilation (i.e. il faut être en mesure d'apporter une solution lorsque le script lève une erreur parce qu'il n'a pas trouvé un élément requis).
Bon nombre des instructions indiquées dans ce chapitre nécessitent d'avoir les privilèges du superutilisateur root. Nous supposerons que vous êtes en mesure de passer en mode root (ce que nous materialisons par le prompt #) si ce n'est pas le cas, vous devrez faire précéder les commandes listées dans ce chapitre de l'instruction sudo (ex $ sudo ifconfig au lieu de # ifconfig, $ et # ne sont pas à saisir, ils font partie du prompt).

2.3.3.3.2.Décompression des sources

Nous vous invitons à décompresser les sources sous /usr/local/src/. Ceci ne devrait pas poser de difficulté si vous êtes familier avec Linux.
Cela se fait en ligne de commande, avec la commande $ tar -xvf <nom du fichier>.tar.gz (au besoin utilisez -jxvf pour les fichiers en .tar.bz2 et -zxvf pour les fichiers en .tar.gz).
Vous pouvez cependant rencontrer les erreurs suivantes:
  • "tar: commande introuvable" (ou "tar: command not found") dans ce cas il faut installer le paquetage tar
  • "tar (child): bzip2: Cannot exec: No such file or directory" dans ce cas il faut installer le paquetage bzip2
Pour rappel un paquetage s'installe (faire précéder les instructions de sudo si vous n'êtes pas sous un compte root):
  • sous Debian et Ubuntu via la commande # apt-get install <nom du paquetage> (à faire précéder de # apt-get update si cela n'a pas été fait récemment)
  • sous Fedora via la commande # dnf <nom du paquetage>
A l'issue de la décompression, vous devez trouver un nouveau répertoire sous /usr/local/src/ portant le nom du logiciel et la version (ex: httpd-2.4.48/ et php-8.0.6/).

2.3.3.3.3.Configuration de l'environnement

Vous pourrez alors aller dans le répertoire nouvellement créé (à savoir /usr/local/src/<nom du logiciel>-<version>/ si vous suivez la procédure) et taper la commande # ./configure --prefix=/usr/local/<nom du logiciel>-<version> <autres paramètres>. Ceci va vérifier et préparer l'environnement de compilation du logiciel pour une installation dans le répertoire /usr/local/<nom du logiciel>-<version>
/usr/local/src/<nom du logiciel>-<version>/ est la destination que nous vous préconisons afin de bien identifier les versions générées mais aussi de bien distinguer les logiciels apportés par la distribution - que l'on trouve directement sous /usr/ - des logiciels que vous avez pu installer "à la main" - cette fois sous /usr/local/).
Si le script de configuration détecte des outils ou sources de bibliothèques manquant dans votre environment de compilation, il stoppera avec un message d'erreur qu'il faudra interpréter afin d'être en mesure de les installer et de relancer le script. Là est toute la difficulté.

2.3.3.3.4.Compilation

Si le script de configuration s'est déroulé sans incident vous pourrez (toujours dans le même dossier) saisir la commande # make.
rem
  • Si par hasard, votre système répond "make: commande introuvable" (ou "make: command not found") c'est qu'il faut installer le paquetage make

2.3.3.3.5.Installation

Une fois la compilation terminée il est possible d'installer le logiciel (dans l'espace défini par l'option --prefix de la commande configure) via # make install.
Cette étape ne devrait poser aucun problème.
Les commandes du logiciel se trouvent alors dans le dossier bin/ de l'endroit où a été installé le logiciel (ex:/usr/local/httpd-2.4.48/bin/). Il peut être pratique (notamment si c'est la seule version du logiciel susceptible de tourner sur le serveur) d'ajouter ce dossier dans le PATH. Une autre alternative peut consister à créer des liens symboliques vers /usr/local/bin (qui est habituellement dans le PATH) des commandes effectivement utilisées (en précisant éventuellement la version). Ex: # ln -s /usr/local/<logiciel>-<version>/bin/<commande> /usr/local/bin/<commande>-<version>

2.3.3.3.6.Installation

Maintenant que nous avons vu la règle générale, il ne suffit plus qu'à l'appliquer tant à PHP qu'à Apache httpd (à moins de ne vouloir PHP qu'en ligne de commande).

2.3.3.4.Compilation et installation d'Apache/httpd

2.3.3.4.1.Introduction

Si vous souhaitez n'utiliser PHP qu'en ligne de commande passez directement à l'étape suivant "Compilation et installation de PHP".

2.3.3.4.2.Décompression des sources

Nous avons précédemment récupéré les sources sous /tmp/ sous la forme d'un fichier httpd-2.4.48.tar.bz2. Nous allons décompresser les sources sous /usr/local/src/.
Dans notre cas, nous saisirons donc les commandes
# cd /usr/local/src
# tar -xvf /tmp/httpd-2.4.48.tar.bz2
rem
  • Afin d'être autorisé à décompresser l'archive sous /usr/local/src nous nous sommes connecté en tant que root (ce que nous avons matérialisé ici par le prompt #). Si vous n'avez pas la possibilité de vous connecter root alors sans doute que vous devrez faire précéder l'instruction tar par sudo.
A l'issue de la décompression, un nouveau dossier httpd-2.4.48/ a été crée sous /usr/local/src qui contient l'ensemble des sources du serveur HTTP Apache.

2.3.3.4.3.Configuration de l'environnement

Vous pouvez maintenant aller dans le répertoire nouvellement créé et lancer la configuration préparatoire à la compilation.
# cd /usr/local/src/httpd-2.4.48
# ./configure --prefix=/usr/local/httpd-2.4.48_php-8.0.6
Pour être en mesure d'installer différentes instances de serveur HTTP embarquant différentes versions de PHP nous avons ajouté php-<version> au nom du dossier.
On vous a déjà prévenu: il est possible que cela ne se passe tout à fait comme prévu et que la commande se termine par un message d'erreur. Cela indique généralement qu'il manque des commandes ou bibliothèques dans votre environnement de compilation.
Voici une liste (non exhaustive probablement) des messages d'erreur que vous pouvez rencontrer et des solutions à apporter:
  • "configure: error: APR not found. Please read the documentation." Dans ce cas, il convient d'installer le paquetage libapr1-dev et de relancer la commande
  • "configure: error: APR-util not found. Please read the documentation." Dans ce cas, il convient d'installer le paquetage libaprutil1-dev et de relancer la commande
  • "configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/". Dans ce cas, il convient d'installer le paquetage libpcre3-dev et de relancer la commande

2.3.3.4.4.Compilation

Si le script de configuration s'est déroulé sans incident vous pouvez (toujours dans le même dossier) saisir la commande # make.
rem
  • Si par hasard, votre système répond "make: commande introuvable" (ou "make: command not found") c'est qu'il faut installer le paquetage make.

2.3.3.4.5.Installation

Une fois la compilation terminée il est possible d'installer le serveur (dans l'espace défini par l'option --prefix de la commande configure) via # make install. Cette étape ne devrait poser aucun problème.
Les commandes du serveur Apache se trouvent alors dans le dossier bin/ de l'endroit où a été installé le serveur (ex:/usr/local/httpd-2.4.48_php-8.0.6/bin/). Il peut être pratique (notamment si c'est le seul serveur web à être susceptible de tourner sur le serveur) d'ajouter ce dossier dans le PATH. Une autre alternative peut consister à créer des liens symboliques depuis /usr/local/bin (qui est habituellement dans le PATH) des commandes effectivement utilisées (en précisant éventuellement la version). Ex: # ln -s /usr/local/httpd-2.4.48_php-8.0.6/bin/apachectl /usr/local/bin/apachectl-2.4.48_php-8.0.6

2.3.3.5.Compilation et installation de PHP

2.3.3.5.1.Décompression des sources

Nous avons précédemment récupéré les sources sous /tmp/ sous la forme d'un fichier php-8.0.6.tar.bz2. Nous allons décompresser les sources sous /usr/local/src/.
Dans notre cas, nous saisirons donc les commandes:
# cd /usr/local/src
# tar -xvf /tmp/php-8.0.6.tar.bz2
rem
  • Je répète pour ceux qui auraient sauté la partie installation d'Apache httpd: Afin d'être autorisé à décompresser l'archive sous /usr/local/src nous nous sommes connecté en tant que root (ce que nous avons matérialisé ici par le prompt #). Si vous n'avez pas la possibilité de vous connecter root alors sans doute que vous devrez faire précéder l'instruction tar par sudo.
A l'issue de la décompression, un nouveau dossier php-8.0.6/ a été crée sous /usr/local/src qui contient l'ensemble des sources de PHP.

2.3.3.5.2.Configuration de l'environnement

Vous pouvez maintenant aller dans le répertoire nouvellement créé et taper la commande # ./configure --prefix=/usr/local/php-8.0.6 --with-apxs2=/usr/local/httpd-2.4.48_php-8.0.6/bin/apxs.
Si vous ne souhaitez pas utiliser PHP comme module web, ne saisissez simplement pas l'option --with-apxs2.
Là, encore, il n'est pas impossible que la commande s'arrête brutalement avec un message d'erreur lié à l'absence d'une commande ou d'une bibliothèque dans votre environnement de compilation.
Voici une liste (non exhaustive probablement) des messages d'erreur que vous pouvez rencontrer et des solutions à apporter:
  • "configure: error: The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config." Dans ce cas, c'est le paquetage pkg-config qu'il faut installer avant de relancer la commande
  • "configure: error: Package requirements (libxml-2.0 >= 2.9.0) were not met: No package 'libxml-2.0' found". Dans ce cas, il convient d'installer le paquetage libxml2-dev et de relancer la commande
  • "configure: error: xml2-config not found. Please check your libxml2 installation." Dans ce cas, il convient d'installer le paquetage libxml2-dev et de relancer la commande
  • "configure: error: Package requirements (sqlite3 > 3.7.4) were not met: No package 'sqlite3' found". Dans ce cas, installez le paquetage libsqlite3-dev et relancez
La liste des erreurs susceptibles d'être levées dépend de la version de PHP en cours d'installation car elle dépend pas mal des modules activés par défaut. D'ailleurs une alternative aux solutions proposées ci-dessus consiste à demander de ne pas intégrer tel ou tel module (plutôt que d'installer la bibliothèque correspondante)

2.3.3.5.3.Compilation

Si le script de configuration s'est déroulé sans incident vous pouvez (toujours dans le même dossier) saisir la commande # make.
Si par hasard, votre système répond "make: commande introuvable" (ou "make: command not found") c'est qu'il faut l'installer. Sous Debian et Ubuntu, c'est le paquetage make qu'il faut installer.

2.3.3.5.4.Installation

Une fois la compilation terminée il est possible d'installer PHP (dans l'espace défini par l'option --prefix de la commande configure) via # make install.
Les commandes PHP se trouvent alors dans le dossier bin/ de l'endroit où il a été installé (ex:/usr/local/php-8.0.6/bin/).
Il peut être pratique (notamment si c'est la seule version de PHP installée sur le serveur ou celle qui doit être utilisée par défaut) d'ajouter ce dossier dans le PATH. Une autre alternative peut consister à créer des liens symboliques vers /usr/local/bin (qui est habituellement dans le PATH) des commandes effectivement utilisées (en précisant éventuellement la version). Ex: # ln -s /usr/local/php-8.0.6/bin/php /usr/local/bin/php-8.0.6 et/ou # ln -s /usr/local/php-8.0.6/bin/php /usr/local/bin/php pour en faire la version par défaut.

2.3.3.5.5.Test de l'installation

Vous pouvez maintenant faire un test rapide $ /usr/local/php-8.0.6/bin/php -v pour vérifier le bon fonctionnement et la version (à supposer que vous ayez précédemment choisi /usr/local/php-8.0.6 pour valeur de --prefix).
PHP 8.0.6 (cli) (built: Jun 3 2021 22:29:53) ( ZTS ) Copyright (c) The PHP Group Zend Engine v4.0.6, Copyright (c) Zend Technologies
Si vous avez opté pour un lien symbolique depuis /usr/local/bin il suffira de taper $ php -v ou $ php-8.0.6 -v si l'on souhaite préciser la version à utiliser.

2.3.3.5.6.Configuration

Avec les sources (sous /usr/local/src/php-8.0.6) vous trouverez 2 fichiers php.ini-development et php.ini-production. Selon l'environnement que vous souhaitez par défaut (environnement ou production), copiez et renommez l'un ou l'autre de ces fichiers en /usr/local/php-8.0.6/lib/php.ini afin d'avoir une configuration adaptée à votre environnement.
En l'absence de fichier php.ini ce sont les paramètres par défaut (définis au sein du code) qui sont utilisés.
Ces fichiers sont là pour vous aider dans la configuration mais vous pouvez tout aussi bien en créer un par vous même ou reprendre l'un ou l'autre et l'adapter entièrement à votre besoin.