Instalação de extensões

Atenção

Diferente do modo de operação do Apache+PHP ou Nginx+PHP, o Workerman é executado via linha de comando em PHP PHP CLI, utilizando um executável PHP diferente, e o arquivo php.ini utilizado pode ser diferente também. Portanto, se em uma página web você visualizar phpinfo() e notar que uma extensão está instalada, isso não significa que a extensão correspondente também está instalada na linha de comando PHP CLI.

Como verificar quais extensões estão instaladas no PHP CLI

Executar php -m listará as extensões já instaladas no PHP CLI, o resultado será semelhante ao seguinte:

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

Como determinar a localização do arquivo php.ini do PHP CLI

Quando precisamos instalar extensões, pode ser necessário configurar manualmente o arquivo php.ini, adicionando as extensões. Portanto, é importante confirmar a localização do arquivo php.ini do PHP CLI. Você pode executar php --ini para encontrar a localização do arquivo ini do PHP CLI, o resultado será semelhante ao seguinte (a exibição pode variar entre diferentes sistemas):

~# php --ini
Caminho do Arquivo de Configuração (php.ini): /etc/php8/cli
Arquivo de Configuração Carregado:         /etc/php8/cli/php.ini
Procurar arquivos .ini adicionais em: /etc/php8/cli/conf.d
Arquivos .ini adicionais analisados:      /etc/php8/cli/conf.d/apc.ini,
/etc/php8/cli/conf.d/pdo.ini,
/etc/php8/cli/conf.d/pdo_mysql.ini
...

Instalando extensões para PHP CLI (exemplo da extensão memcached)

Método 1: Usar o comando apt ou yum

Se o PHP foi instalado através do comando apt ou yum, as extensões também podem ser instaladas via apt ou yum.

Método de instalação de extensão PHP com apt em sistemas como debian/ubuntu (usuários não-root precisam adicionar o comando sudo)

  1. Use apt-cache search para procurar o pacote da extensão:
    ~# apt-cache search memcached php
    php-apc - Módulo APC (Alternative PHP Cache) para PHP 5
    php5-memcached - Módulo memcached para php5
  2. Use apt-get install para instalar o pacote da extensão:
    ~# apt-get install -y php5-memcached
    Lendo listas de pacotes... Pronto
    Lendo informações de estado... Pronto
    ...

Método de instalação de extensão PHP com yum em sistemas como centos

  1. Use yum search para procurar o pacote da extensão:
    ~# yum search memcached php
    php-pecl-memcached - Módulo memcached para php5
  2. Use yum install para instalar o pacote da extensão:
    ~# yum install -y php-pecl-memcached
    Lendo listas de pacotes... Pronto
    Lendo informações de estado... Pronto
    ...

    Nota:

Usar apt ou yum para instalar extensões PHP irá configurar automaticamente o arquivo php.ini, tornando-o pronto para uso imediatamente, o que é bastante conveniente. A desvantagem é que algumas extensões podem não ter um pacote correspondente disponível no apt ou yum.

Método 2: Usar pecl para instalar

Use o comando pecl install para instalar a extensão.

  1. Execute pecl install:
    ~# pecl install memcached
    baixando memcached-2.2.0.tgz ...
    Iniciando download de memcached-2.2.0.tgz (70.449 bytes)
    ....
  2. Configure o php.ini

Execute php --ini para encontrar a localização do arquivo php.ini e adicione extension=memcached.so no arquivo.

Método 3: Compilar e instalar a partir do código fonte (geralmente para instalar extensões nativas do PHP, como a extensão pcntl)

  1. Use o comando php -v para verificar a versão atual do PHP CLI:
    ~# php -v
    PHP 5.3.29-1~dotdeb.0 com 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. Baixe o código fonte do PHP de acordo com a versão:

Página para download de versões históricas do PHP: https://php.net/releases/

  1. Descompacte o arquivo fonte.

Por exemplo, se o nome do arquivo comprimido baixado for 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. Acesse o diretório ext/pcntl do código fonte:
    ~# cd php-5.3.29/ext/pcntl/
  2. Execute o comando phpize:
    ~# phpize
    Configurando para:
    Versão da API PHP:         20090626
    Número da API do Módulo Zend:      20090626
    Número da API da Extensão Zend:   220090626
  3. Execute o comando configure:
    ~# ./configure
    checando por grep que lida com linhas longas e -e... /bin/grep
    checando por egrep... /bin/grep -E
    ...
  4. Execute o 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. Execute o comando make install:
    ~# make install
    Instalando extensões compartilhadas:     /usr/lib/php5/20090626/
  6. Configure o arquivo ini

Execute php --ini para encontrar a localização do php.ini e adicione extension=pcntl.so no arquivo.

Nota:
Esse método é geralmente utilizado para instalar extensões nativas do PHP, como as extensões posix e pcntl. Além de usar phpize para compilar uma extensão, você também pode recompilar todo o PHP, adicionando as extensões durante a compilação, por exemplo, no diretório raiz do código fonte execute:

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

Método 4: Instalação via phpize

Se a extensão que você deseja instalar não estiver no diretório ext do código fonte do PHP, você precisará procurá-la e baixá-la em https://pecl.php.net.

Vamos usar a instalação da extensão libevent como exemplo (supondo que o sistema tenha a biblioteca libevent-dev instalada).

  1. Baixe o arquivo compactado da extensão libevent (você pode baixar em qualquer diretório do seu 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
    Resolvendo pecl.php.net... 104.236.228.160
    Conectando a pecl.php.net|104.236.228.160|:80... conectado.
    Requisição HTTP enviada, aguardando resposta... 200 OK
    Comprimento: 9806 (9.6K) [application/octet-stream]
    Salvando em: “libevent-0.1.0.tgz”

100%[=======================================================>] 9.806 41.4K/s em 0.2s


2. Descompacte o arquivo da extensão:
```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. Acesse o diretório do código fonte:

    ~# cd libevent-0.1.0/
  2. Execute o comando phpize:

    ~# phpize
    Configurando para:
    Versão da API PHP:         20090626
    Número da API do Módulo Zend:      20090626
    Número da API da Extensão Zend:   220090626
  3. Execute o comando configure:

    ~# ./configure
    checando por grep que lida com linhas longas e -e... /bin/grep
    checando por egrep... /bin/grep -E
    checando por um sed que não trunca a saída... /bin/sed
    checando por cc... cc
    checando se o compilador C funciona... sim
    ...
  4. Execute o 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. Execute o comando make install:

    ~# make install
    Instalando extensões compartilhadas:     /usr/lib/php5/20090626/
  6. Configure o arquivo ini

Execute php --ini para encontrar a localização do php.ini e adicione extension=libevent.so no arquivo.