Installation des extensions

Remarque

Contrairement aux modes d'exécution d'Apache+PHP ou Nginx+PHP, Workerman fonctionne en utilisant PHP en ligne de commande PHP CLI, et utilise un exécutable PHP différent ; le fichier php.ini utilisé peut également être différent. Ainsi, voir une extension installée en exécutant phpinfo() dans une page web ne signifie pas que l'extension correspondante est également installée pour PHP CLI.

Comment déterminer quelles extensions sont installées avec PHP CLI

Exécuter php -m listera les extensions déjà installées pour PHP CLI, avec un résultat similaire à ceci :

~# php -m
[Modules PHP]
event
posix
pcntl
...

Comment déterminer l'emplacement du fichier php.ini de PHP CLI

Lorsque nous installons une extension, il peut être nécessaire de configurer manuellement le fichier php.ini pour y ajouter cette extension. Il est donc important de confirmer l'emplacement du fichier php.ini de PHP CLI. Vous pouvez exécuter php --ini pour trouver la localisation du fichier ini de PHP CLI, avec un résultat similaire à ceci (les résultats peuvent varier selon les systèmes) :

~# php --ini
Configuration File (php.ini) Path: /etc/php8/cli
Loaded Configuration File:         /etc/php8/cli/php.ini
Scan for additional .ini files in: /etc/php8/cli/conf.d
Additional .ini files parsed:      /etc/php8/cli/conf.d/apc.ini,
/etc/php8/cli/conf.d/pdo.ini,
/etc/php8/cli/conf.d/pdo_mysql.ini
...

Installer des extensions pour PHP CLI (exemple d'installation de l'extension memcached)

Méthode 1 : Utiliser les commandes apt ou yum pour l'installation

Si PHP est installé via apt ou yum, les extensions peuvent également être installées via apt ou yum.

Méthode d'installation des extensions PHP avec apt sur les systèmes debian/ubuntu (l'utilisateur non root doit ajouter la commande sudo)

  1. Utiliser apt-cache search pour rechercher le paquet d'extension
    ~# apt-cache search memcached php
    php-apc - Module APC (Alternative PHP Cache) pour PHP 5
    php5-memcached - Module memcached pour php5
  2. Utiliser apt-get install pour installer le paquet d'extension
    ~# apt-get install -y php5-memcached
    Reading package lists... Done
    Reading state information... Done
    ...

Méthode d'installation des extensions PHP avec yum sur les systèmes centos

  1. Utiliser yum search pour rechercher le paquet d'extension
    ~# yum search memcached php
    php-pecl-memcached - Module memcached pour php5
  2. Utiliser yum install pour installer le paquet d'extension
    ~# yum install -y php-pecl-memcached
    Reading package lists... Done
    Reading state information... Done
    ...

    Remarque :

L'utilisation d'apt ou de yum pour installer des extensions PHP configure automatiquement le fichier php.ini, permettant une utilisation immédiate après installation, ce qui est très pratique. L'inconvénient est que certaines extensions n'ont pas de paquets d'installation correspondants dans apt ou yum.

Méthode 2 : Utiliser pecl pour l'installation

Utiliser la commande pecl install pour installer l'extension.

  1. Installer avec pecl install
    ~# pecl install memcached
    downloading memcached-2.2.0.tgz ...
    Starting to download memcached-2.2.0.tgz (70,449 bytes)
    ....
  2. Configurer php.ini

En exécutant php --ini pour trouver l'emplacement du fichier php.ini, puis ajoutez extension=memcached.so dans le fichier.

Méthode 3 : Compilation manuelle à partir des sources (généralement pour installer les extensions fournies avec PHP, par exemple l'extension pcntl)

  1. Utiliser la commande php -v pour vérifier la version actuelle de PHP CLI
    ~# php -v
    PHP 5.3.29-1~dotdeb.0 avec Suhosin-Patch (cli) (construit : 14 août 2014 19:55:20)
    Copyright (c) 1997-2014 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
  2. Télécharger le code source de PHP en fonction de la version

Page de téléchargement des anciennes versions de PHP : https://php.net/releases/

  1. Décompresser le fichier compressé du code source

Par exemple, si le nom du fichier compressé téléchargé est php-5.3.29.tar.gz

~# tar -zxvf php-5.3.29.tar.gz
php-5.3.29/
php-5.3.29/README.WIN32-BUILD-SYSTEM
php-5.3.29/netware/
...
  1. Accéder au répertoire ext/pcntl dans le code source
    ~# cd php-5.3.29/ext/pcntl/
  2. Exécuter la commande phpize
    ~# phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
  3. Exécuter la commande configure
    ~# ./configure
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    ...
  4. Exécuter la commande make
    ~# make
    /bin/bash /tmp/php-5.3.29/ext/pcntl/libtool --mode=compile cc ...
    -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend...
    ...
  5. Exécuter la commande make install
    ~# make install
    Installing shared extensions:     /usr/lib/php5/20090626/
  6. Configurer le fichier ini

En exécutant php --ini pour trouver l'emplacement du fichier php.ini, puis ajoutez extension=pcntl.so dans le fichier.

Remarque :
Cette méthode est généralement utilisée pour installer les extensions fournies avec PHP, comme les extensions posix et pcntl. En plus d'utiliser phpize pour compiler une extension, il est également possible de recompiler l'ensemble de PHP en ajoutant les extensions comme paramètres lors de la compilation, par exemple en exécutant depuis le répertoire racine du code source :

~# ./configure --enable-pcntl --enable-posix ...
~# make && make install

Méthode 4 : Installation via phpize

Si l'extension à installer ne se trouve pas dans le répertoire ext du code source de PHP, il faut la rechercher et la télécharger sur https://pecl.php.net.

Prenons comme exemple l'installation de l'extension libevent (en supposant que la bibliothèque libevent-dev est installée sur le système).

  1. Télécharger l'archive de l'extension libevent (vous pouvez la télécharger dans n'importe quel répertoire de votre choix sur le système)
    
    ~# wget https://pecl.php.net/get/libevent-0.1.0.tgz
    --2015-05-26 21:43:40--  https://pecl.php.net/get/libevent-0.1.0.tgz
    Résolution de pecl.php.net... 104.236.228.160
    Connexion à pecl.php.net|104.236.228.160|:80... connecté.
    Requête HTTP envoyée, attente de réponse... 200 OK
    Longueur : 9806 (9.6K) [application/octet-stream]
    Sauvegarde dans : « libevent-0.1.0.tgz »

100%[=======================================================>] 9,806 41.4K/s en 0.2s


2. Décompresser l'archive de l'extension
```shell
~# tar -zxvf libevent-0.1.0.tgz
package.xml
libevent-0.1.0/config.m4
libevent-0.1.0/CREDITS
libevent-0.1.0/libevent.c
....
  1. Accéder au répertoire de l'archive

    ~# cd libevent-0.1.0/
  2. Exécuter la commande phpize

    ~# phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
  3. Exécuter la commande configure

    ~# ./configure
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    checking for a sed that does not truncate output... /bin/sed
    checking for cc... cc
    checking whether the C compiler works... yes
    ...
  4. Exécuter la commande make

    ~# /bin/bash /data/test/libevent-0.1.0/libtool --mode=compile cc  -I. -I/data/test/libevent-0.1.0 -DPHP_ATOM_INC -I/data/test/libevent-0.1.0/include
    ...
  5. Exécuter la commande make install

    ~# make install
    Installing shared extensions:     /usr/lib/php5/20090626/
  6. Configurer le fichier ini

En exécutant php --ini pour trouver l'emplacement du fichier php.ini, puis ajoutez extension=libevent.so dans le fichier.