Установка расширений

Важно

В отличие от режима работы Apache+PHP или Nginx+PHP, Workerman работает на основе командной строки PHP PHP CLI и использует другую исполняемую программу PHP. Также файл php.ini может отличаться. Поэтому, если вы увидите установленное расширение, вызывая phpinfo() на веб-странице, это не означает, что соответствующее расширение также установлено в командной строке PHP CLI.

Как определить, какие расширения установлены в PHP CLI

Выполнение команды php -m выведет список расширений, установленных в командной строке PHP CLI, результат будет выглядеть следующим образом:

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

Как определить расположение файла php.ini для PHP CLI

При установке расширений может потребоваться вручную настроить файл php.ini, чтобы добавить в него расширение. Поэтому нужно знать расположение файла php.ini для PHP CLI. Вы можете выполнить php --ini, чтобы узнать местоположение ini-файла PHP CLI, результат будет выглядеть следующим образом (результаты могут отличаться на разных системах):

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

Установка расширений для PHP CLI (на примере установки расширения memcached)

Метод 1: Установка с помощью команд apt или yum

Если PHP установлен с помощью команд apt или yum, то расширения также можно установить с помощью apt или yum.

Метод установки PHP расширений через apt для систем, таких как debian/ubuntu (необходимо добавить sudo для не-root пользователей)

  1. Используйте apt-cache search, чтобы найти пакет расширения
    ~# apt-cache search memcached php
    php-apc - APC (Alternative PHP Cache) module for PHP 5
    php5-memcached - memcached module for php5
  2. Используйте apt-get install, чтобы установить пакет расширения
    ~# apt-get install -y php5-memcached
    Reading package lists... Done
    Reading state information... Done
    ...

Метод установки PHP расширений через yum для систем, таких как centos

  1. Используйте yum search, чтобы найти пакет расширения
    ~# yum search memcached php
    php-pecl-memcached - memcached module for php5
  2. Используйте yum install, чтобы установить пакет расширения
    ~# yum install -y php-pecl-memcached
    Reading package lists... Done
    Reading state information... Done
    ...

    Примечание:

Использование apt или yum для установки PHP расширений автоматически настраивает файл php.ini, и после установки расширение доступно для использования, что очень удобно. Недостаток в том, что некоторые расширения могут не иметь соответствующих установочных пакетов в apt или yum.

Метод 2: Установка с помощью pecl

Используйте команду pecl install, чтобы установить расширение.

  1. Установите с помощью pecl install
    ~# pecl install memcached
    downloading memcached-2.2.0.tgz ...
    Starting to download memcached-2.2.0.tgz (70,449 bytes)
    ....
  2. Настройте php.ini

Запустите php --ini, чтобы узнать расположение файла php.ini, затем добавьте extension=memcached.so в файл.

Метод 3: Установка из исходников (обычно для установки встроенных расширений PHP, на примере установки расширения pcntl)

  1. Используйте команду php -v, чтобы посмотреть текущую версию 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. Скачайте исходный код PHP в зависимости от версии

Страница загрузки исторических версий PHP: https://php.net/releases/

  1. Распакуйте архив исходников

Например, имя скачанного архива 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. Перейдите в директорию ext/pcntl в исходниках
    ~# cd php-5.3.29/ext/pcntl/
  2. Выполните команду phpize
    ~# phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
  3. Выполните команду configure
    ~# ./configure
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    ...
  4. Выполните команду 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. Выполните команду make install
    ~# make install
    Installing shared extensions:     /usr/lib/php5/20090626/
  6. Настройте ini-файл

Запустите php --ini, чтобы узнать расположение файла php.ini, затем добавьте extension=pcntl.so в файл.

Примечание:
Этот метод обычно используется для установки встроенных расширений PHP, таких как posix и pcntl. Кроме использования phpize для компиляции определенного расширения, также можно перекомпилировать весь PHP, добавив параметры при компиляции, например, в корневом каталоге исходников выполните

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

Метод 4: Установка с помощью phpize

Если расширение, которое вы хотите установить, отсутствует в директории ext исходников PHP, необходимо найти и скачать это расширение на https://pecl.php.net

В качестве примера рассмотрим установку расширения libevent (предполагается, что в системе установлен библиотека libevent-dev).

  1. Скачайте архив с файлом расширения libevent (можно скачать в любой директории на текущей системе)
    
    ~# 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. Распакуйте архив расширения
```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. Перейдите в директорию исходников

    ~# cd libevent-0.1.0/
  2. Выполните команду phpize

    ~# phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
  3. Выполните команду 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. Выполните команду 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. Выполните команду make install

    ~# make install
    Installing shared extensions:     /usr/lib/php5/20090626/
  6. Настройте ini-файл

Запустите php --ini, чтобы узнать расположение файла php.ini, затем добавьте extension=libevent.so в файл.