Instalación de Extensiones

Nota

A diferencia del modo de funcionamiento de Apache+PHP o Nginx+PHP, Workerman se ejecuta en base a la línea de comandos de PHP PHP CLI, utilizando un ejecutable de PHP diferente, y el archivo php.ini que utiliza también puede ser diferente. Por lo tanto, si imprimes phpinfo() en una página web y ves que se ha instalado una cierta extensión, no significa que el PHP CLI de la línea de comandos también tenga instalada la extensión correspondiente.

Cómo determinar qué extensiones están instaladas en PHP CLI

Ejecutando php -m se listarán las extensiones que ya están instaladas en PHP CLI, resultando en algo similar a esto:

~# php -m
[Módulos de PHP]
event
posix
pcntl
...

Cómo determinar la ubicación del archivo php.ini de PHP CLI

Al instalar extensiones, es posible que necesitemos configurar manualmente el archivo php.ini y agregar la extensión, por lo que es necesario confirmar la ubicación del archivo php.ini de PHP CLI. Puedes ejecutar php --ini para buscar la ubicación del archivo ini de PHP CLI, y el resultado será algo parecido a esto (los resultados pueden variar según el sistema):

~# php --ini
Ruta del archivo de configuración (php.ini): /etc/php8/cli
Archivo de configuración cargado:         /etc/php8/cli/php.ini
Buscar archivos .ini adicionales en: /etc/php8/cli/conf.d
Archivos .ini adicionales parseados:      /etc/php8/cli/conf.d/apc.ini,
/etc/php8/cli/conf.d/pdo.ini,
/etc/php8/cli/conf.d/pdo_mysql.ini
...

Instalación de Extensiones para PHP CLI (Ejemplo de instalación de la extensión memcached)

Método 1: Usar los comandos apt o yum para la instalación

Si PHP ha sido instalado mediante el comando apt o yum, también se pueden instalar extensiones a través de apt o yum.

Método de instalación de extensiones PHP en sistemas debian/ubuntu mediante apt (el usuario no root necesitará usar el comando sudo)

  1. Usa apt-cache search para buscar paquetes de extensión
    ~# apt-cache search memcached php
    php-apc - Módulo APC (Alternativa de Caché de PHP) para PHP 5
    php5-memcached - Módulo memcached para php5
  2. Usar apt-get install para instalar el paquete de extensión
    ~# apt-get install -y php5-memcached
    Leyendo listas de paquetes... Hecho
    Leyendo información de estado... Hecho
    ...

Método de instalación de extensiones PHP en sistemas centos mediante yum

  1. Usa yum search para buscar paquetes de extensión
    ~# yum search memcached php
    php-pecl-memcached - Módulo memcached para php5
  2. Usar yum install para instalar el paquete de extensión
    ~# yum install -y php-pecl-memcached
    Leyendo listas de paquetes... Hecho
    Leyendo información de estado... Hecho
    ...

    Nota:

Usar apt o yum para instalar extensiones PHP configurará automáticamente el archivo php.ini, así que estarán disponibles directamente después de la instalación, lo cual es muy conveniente. La desventaja es que algunas extensiones pueden no tener paquetes de instalación correspondientes en apt o yum.

Método 2: Usar pecl para instalar

Utilizando el comando pecl install para instalar la extensión.

  1. pecl install para instalar
    ~# pecl install memcached
    descargando memcached-2.2.0.tgz ...
    Comenzando a descargar memcached-2.2.0.tgz (70,449 bytes)
    ....
  2. Configurar php.ini

Ejecutando php --ini para encontrar la ubicación del archivo php.ini, luego agregar extension=memcached.so en el archivo.

Método 3: Compilación e instalación desde el código fuente (generalmente para instalar extensiones que vienen con PHP, usando la extensión pcntl como ejemplo)

  1. Usa el comando php -v para ver la versión actual del PHP CLI
    ~# php -v
    PHP 5.3.29-1~dotdeb.0 con Suhosin-Patch (cli) (compilado: 14 de agosto de 2014 19:55:20)
    Copyright (c) 1997-2014 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
  2. Descarga el código fuente de PHP según la versión

Página de descarga de versiones históricas de PHP: https://php.net/releases/

  1. Descomprimir el paquete de código fuente

Por ejemplo, si el nombre del paquete descargado es 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. Entra al directorio ext/pcntl del código fuente
    ~# cd php-5.3.29/ext/pcntl/
  2. Ejecuta el comando phpize
    ~# phpize
    Configurando para:
    Versión de la API de PHP:         20090626
    Número de API del Módulo Zend:      20090626
    Número de API de la Extensión Zend:   220090626
  3. Ejecuta el comando configure
    ~# ./configure
    verificando grep que maneja líneas largas y -e... /bin/grep
    verificando egrep... /bin/grep -E
    ...
  4. Ejecuta el 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. Ejecuta el comando make install
    ~# make install
    Instalando extensiones compartidas:     /usr/lib/php5/20090626/
  6. Configura el archivo ini

Ejecutando php --ini para encontrar la ubicación del archivo php.ini, luego agregar extension=pcntl.so en el archivo.

Nota:
Este método generalmente se utiliza para instalar extensiones que vienen con PHP, como las extensiones posix y pcntl. Además de usar phpize para compilar una extensión, también se puede recompilar todo PHP, añadiendo extensiones durante la compilación, como al ejecutar en el directorio raíz del código fuente

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

Método 4: Instalación usando phpize

Si la extensión que deseas instalar no está en el directorio ext del código fuente de PHP, deberás buscar y descargar la extensión en https://pecl.php.net.

Usando como ejemplo la instalación de la extensión libevent (asumiendo que el sistema tiene instalado el paquete libevent-dev).

  1. Descarga el paquete comprimido de archivos de la extensión libevent (puedes descargarlo en cualquier directorio de tu sistema)
    
    ~# 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
    Resolviendo pecl.php.net... 104.236.228.160
    Conectando a pecl.php.net|104.236.228.160|:80... conectado.
    Solicitud HTTP enviada, esperando respuesta... 200 OK
    Longitud: 9806 (9.6K) [application/octet-stream]
    Guardando en: “libevent-0.1.0.tgz”

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


2. Descomprimir el archivo de la extensión
```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. Entra al directorio del código fuente

    ~# cd libevent-0.1.0/
  2. Ejecuta el comando phpize

    ~# phpize
    Configurando para:
    Versión de la API de PHP:         20090626
    Número de API del Módulo Zend:      20090626
    Número de API de la Extensión Zend:   220090626
  3. Ejecuta el comando configure

    ~# ./configure
    verificando grep que maneja líneas largas y -e... /bin/grep
    verificando egrep... /bin/grep -E
    verificando un sed que no trunque la salida... /bin/sed
    verificando cc... cc
    verificando si el compilador C funciona... sí
    ...
  4. Ejecuta el 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. Ejecuta el comando make install

    ~# make install
    Instalando extensiones compartidas:     /usr/lib/php5/20090626/
  6. Configura el archivo ini

Ejecutando php --ini para encontrar la ubicación del archivo php.ini, luego agregar extension=libevent.so en el archivo.