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)
- Usa
apt-cache searchpara 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 - Usar
apt-get installpara 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
- Usa
yum searchpara buscar paquetes de extensión~# yum search memcached php php-pecl-memcached - Módulo memcached para php5 - Usar
yum installpara 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.
pecl installpara instalar~# pecl install memcached descargando memcached-2.2.0.tgz ... Comenzando a descargar memcached-2.2.0.tgz (70,449 bytes) ....- 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)
- Usa el comando
php -vpara 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 - 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/
- 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/
...
- Entra al directorio ext/pcntl del código fuente
~# cd php-5.3.29/ext/pcntl/ - 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 - Ejecuta el comando
configure~# ./configure verificando grep que maneja líneas largas y -e... /bin/grep verificando egrep... /bin/grep -E ... - 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... ... - Ejecuta el comando
make install~# make install Instalando extensiones compartidas: /usr/lib/php5/20090626/ - 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).
- 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
....
-
Entra al directorio del código fuente
~# cd libevent-0.1.0/ -
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 -
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í ... -
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 ... -
Ejecuta el comando
make install~# make install Instalando extensiones compartidas: /usr/lib/php5/20090626/ -
Configura el archivo ini
Ejecutando php --ini para encontrar la ubicación del archivo php.ini, luego agregar extension=libevent.so en el archivo.