Installazione Estensioni

Attenzione

A differenza della modalità di esecuzione con Apache+PHP o Nginx+PHP, Workerman viene eseguito tramite la linea di comando di PHP PHP CLI, utilizzando un diverso eseguibile PHP; il file php.ini utilizzato può anche essere diverso. Pertanto, vedere un'estensione installata in un'applicazione web con phpinfo() non significa che l'estensione corrispondente sia installata anche per PHP CLI.

Come Determinare Quali Estensioni Sono Installate in PHP CLI

Esegui php -m per elencare le estensioni che sono già installate per PHP CLI, il risultato sarà simile al seguente:

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

Come Determinare la Posizione del file php.ini di PHP CLI

Quando installiamo un'estensione, potremmo aver bisogno di configurare manualmente il file php.ini, aggiungendo l'estensione, quindi è necessario confermare la posizione del file php.ini di PHP CLI. Possiamo eseguire php --ini per trovare la posizione del file ini di PHP CLI, il risultato sarà simile al seguente (i risultati possono variare tra i diversi sistemi):

~# 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
...

Installazione di Estensioni per PHP CLI (Prendendo come Esempio l'Estensione memcached)

Metodo 1: Installazione tramite comandi apt o yum

Se PHP è stato installato tramite il comando apt o yum, anche le estensioni possono essere installate tramite apt o yum

Metodo di installazione delle estensioni PHP su sistemi debian/ubuntu (l'utente non root deve aggiungere il comando sudo)

  1. Usa apt-cache search per cercare il pacchetto dell'estensione
    ~# apt-cache search memcached php
    php-apc - Modulo APC (Alternative PHP Cache) per PHP 5
    php5-memcached - Modulo memcached per php5
  2. Usa apt-get install per installare il pacchetto dell'estensione
    ~# apt-get install -y php5-memcached
    Reading package lists... Done
    Reading state information... Done
    ...

Metodo di installazione delle estensioni PHP su sistemi centos

  1. Usa yum search per cercare il pacchetto dell'estensione
    ~# yum search memcached php
    php-pecl-memcached - Modulo memcached per php5
  2. Usa yum install per installare il pacchetto dell'estensione
    ~# yum install -y php-pecl-memcached
    Reading package lists... Done
    Reading state information... Done
    ...

    Nota:

L'uso di apt o yum per installare le estensioni PHP configurerà automaticamente il file php.ini, reso subito utilizzabile, il che è molto comodo. Tuttavia, alcuni pacchetti di estensione potrebbero non essere disponibili in apt o yum.

Metodo 2: Installazione tramite pecl

Usa il comando pecl install per installare l'estensione

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

Eseguendo php --ini cerca la posizione del file php.ini, quindi aggiungi extension=memcached.so nel file.

Metodo 3: Compilazione e Installazione da Sorgente (generalmente utilizzato per installare le estensioni fornite con PHP, prendendo come esempio l'estensione pcntl)

  1. Usa il comando php -v per controllare la versione attuale di PHP CLI
    ~# php -v
    PHP 5.3.29-1~dotdeb.0 with Suhosin-Patch (cli) (built: Aug 14 2014 19:55:20)
    Copyright (c) 1997-2014 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
  2. Scarica il codice sorgente di PHP in base alla versione

Pagina di download delle versioni storiche di PHP: https://php.net/releases/

  1. Estrai l'archivio sorgente

Ad esempio, se il nome del pacchetto scaricato è 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. Vai nella directory ext/pcntl del sorgente
    ~# cd php-5.3.29/ext/pcntl/
  2. Esegui il comando phpize
    ~# phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
  3. Esegui il comando configure
    ~# ./configure
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    ...
  4. Esegui il comando 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. Esegui il comando make install
    ~# make install
    Installing shared extensions:     /usr/lib/php5/20090626/
  6. Configura il file ini

Eseguendo php --ini per cercare la posizione del file php.ini, quindi aggiungi extension=pcntl.so nel file.

Nota:
Questo metodo è generalmente utilizzato per installare le estensioni fornite con PHP, come ad esempio le estensioni posix e pcntl. Oltre a compilare un'estensione con phpize, è anche possibile ricompilare l'intero PHP, aggiungendo le estensioni come parametri al momento della compilazione, ad esempio eseguendo

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

Metodo 4: Installazione tramite phpize

Se l'estensione da installare non è presente nella directory ext del sorgente PHP, è necessario cercare e scaricare l'estensione da https://pecl.php.net

Prendendo come esempio l'installazione dell'estensione libevent (supponendo che il sistema abbia già installato la libreria libevent-dev)

  1. Scarica il pacchetto dell'estensione libevent (puoi scaricarlo in qualsiasi directory del sistema corrente)
    
    ~# 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
    Resolving pecl.php.net... 104.236.228.160
    Connecting to pecl.php.net|104.236.228.160|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 9806 (9.6K) [application/octet-stream]
    Saving to: “libevent-0.1.0.tgz”

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


2. Estrai il pacchetto dell'estensione
```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. Vai nella directory sorgente

    ~# cd libevent-0.1.0/
  2. Esegui il comando phpize

    ~# phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
  3. Esegui il comando 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. Esegui il comando 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. Esegui il comando make install

    ~# make install
    Installing shared extensions:     /usr/lib/php5/20090626/
  6. Configura il file ini

Eseguendo php --ini per cercare la posizione del file php.ini, quindi aggiungi extension=libevent.so nel file.