Компиляция и настройка PHP-расширений на хостинге Beget

Скрипты и плагины сайтов часто требуют для своей работы установленные расширения PHP (от англ. Hypertext Preprocessor – препроцессор гипертекста). Однако на виртуальном хостинге необходимые расширения могут быть либо не установлены, либо недоступны для определенной версии PHP.

В этой статье мы расскажем, как вы можете проверить список доступных расширений для выбранной версии PHP, а также как установить нужное расширение PHP, если оно отсутствует. Для примера мы установим расширения Xdebug, APCu и sqlsrv.

Подключение к аккаунту

Для сборки расширения либо проверки его наличия сначала необходимо подключиться к аккаунту. Вы можете подключиться либо с помощью SSH (от англ. Secure SHell – защищенная оболочка) по пошаговой инструкции, либо использовать терминал в панели управления.

После подключения нужно перейти в специальный виртуальный контейнер на сервере (Docker), где доступны права на компиляцию. Для этого следует использовать следующую команду:

$ ssh localhost -p222

Затем введите пароль. Он такой же, как и для доступа к аккаунту.

betutorial@localhost's password:
Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.10.161-1-beget-acl-test x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro
(docker) betutorial@dragon:~ [0] $

Просмотр установленных расширений

Обратите внимание: некоторые расширения установлены, но не включены в стандартной конфигурации. Список всех доступных расширений вы можете получить при помощи команды:

$ ll /usr/local/php-cgi/X.X/lib/php/2*

Вместо X.X укажите версию PHP, которую использует ваш сайт.

Для подключения расширения из данного списка для режима CGI (стандарт взаимодействия веб-сервера с внешними программами) необходимо добавить строку в файл php.ini, находящийся в директории cgi-bin в public_html:

extension=<МОДУЛЬ>.so

Включение режима CGI

Обратите внимание!
Активация режима CGI может увеличить создаваемую сайтом нагрузку на сервер.

Для успешного использования собранных вручную расширений сайт должен работать в режиме CGI.

Переключить PHP в режим CGI вы можете самостоятельно в разделе “Сайты” вашей панели управления. Для этого нажмите на иконку в строке с именем сайта:

раздел сайты

Для включения режима CGI достаточно активировать соответствующую опцию:

настройка сайта

При необходимости вы также можете изменить версию PHP.

Сборка Xdebug

После входа в Docker и активации режима CGI перейдем к сборке расширения.

Ниже будет рассмотрена компиляция Xdebug для PHP 8.3. При желании можно скомпилировать для любой версии PHP, в зависимости от того, на какой из них работает сайт.

Перейдите в каталог cgi-bin для нужного сайта:

$ cd ~/betutorial.ru/public_html/cgi-bin/

Далее скачайте исходный код Xdebug с официального сайта:

$ wget https://xdebug.org/files/xdebug-3.5.0.tgz

На текущий момент последняя версия Xdebug 3.5.0, скачать последнюю версию можно с официального сайта.

Далее нужно распаковать архив и перейти в распакованный каталог:

$ tar xfv xdebug-3.5.0.tgz; cd xdebug-3.5.0/

Окружение для PHP-расширения подготавливается командой phpize. Вместо символов X.X укажите версию PHP вашего сайта.

/usr/local/php-cgi/X.X/bin/phpize

В нашем случае – 8.3:

$ /usr/local/php-cgi/8.3/bin/phpize
Configuring for:
PHP Api Version:         20230831
Zend Module Api No:      20230831
Zend Extension Api No:   420230831

Утилитой configure настраиваются все зависимости, префиксы и переменные, после чего генерируется Makefile. По аналогии с предыдущим пунктом укажите версию PHP сайта:

$ ./configure --with-php-config=/usr/local/php-cgi/8.3/bin/php-config

checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E

configure: creating ./config.status
config.status: creating config.h

Затем нужно скомпилировать Xdebug из исходного кода:

$ make -j$((`nproc`/4))

После удачного выполнения команды make в каталоге modules можно увидеть готовый модуль:

$ ls modules/
xdebug.so

Нужно скопировать его в каталог cgi-bin, в нашем случае – сайта betutorial.ru:

$ cp modules/xdebug.so ~/betutorial.ru/public_html/cgi-bin/

После чего перейдите в этот каталог:

$ cd ~/betutorial.ru/public_html/cgi-bin/

Следующая команда включит расширение в файле php.ini:

$ echo "zend_extension = $(pwd)/xdebug.so" >> php.ini

Дальше нужно проверить, что расширение подключилось корректно. Для этого следует добавить в корень сайта файл x.php со следующим содержимым:

<?php phpinfo();

И нужно обратиться к нему через браузер, ссылка будет выглядеть следующим образом: http://domain.com/x.php

страница phpinfo xdebug

Расширение установлено и активировано.

Сборка APCu

После входа в Docker и активации режима CGI перейдем к сборке расширения.

Ниже будет рассмотрена компиляция APCu для PHP 8.3. При желании можно скомпилировать для любой версии PHP, в зависимости от того, на какой из них работает сайт.

Перейдите в каталог cgi-bin для нужного сайта:

$ cd ~/betutorial.ru/public_html/cgi-bin/

Далее скачайте исходный код APCu с официального сайта:

$ wget https://pecl.php.net/get/apcu-5.1.28.tgz

На текущий момент последняя версия APCu 5.1.28, скачать последнюю версию можно с официального сайта.

Далее следует распаковать архив и перейти в распакованный каталог:

$ tar xfv apcu-5.1.28.tgz; cd apcu-5.1.28

Окружение для PHP-расширения подготавливается командой phpize. Вместо символов X.X укажите версию PHP вашего сайта.

$ /usr/local/php-cgi/X.X/bin/phpize

В нашем случае – 8.3:

$ /usr/local/php-cgi/8.3/bin/phpize
Configuring for:
PHP Api Version:         20230831
Zend Module Api No:      20230831
Zend Extension Api No:   420230831

Утилитой configure настраиваются все зависимости, префиксы и переменные, после чего генерируется Makefile. По аналогии с предыдущим пунктом укажите версию PHP сайта:

$ ./configure --with-php-config=/usr/local/php-cgi/8.3/bin/php-config


checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
...
configure: creating ./config.status
config.status: creating config.h

Затем нужно скомпилировать Xdebug из исходного кода:

$ make -j$((`nproc`/4))

После удачного выполнения команды make в каталоге modules можно увидеть готовый модуль:

$ ls modules/
apcu.so

Нужно скопировать его в каталог cgi-bin, в нашем случае – сайта betutorial.ru:

$ cp modules/apcu.so ~/betutorial.ru/public_html/cgi-bin/

После чего перейдите в этот каталог:

$ cd ~/betutorial.ru/public_html/cgi-bin/

Следующая команда включит расширение в файле php.ini:

$ echo "extension = $(pwd)/apcu.so" >> php.ini

Дальше нужно проверить, что расширение подключилось корректно. Для этого следует добавить в корень сайта файл x.php со следующим содержимым:

<?php phpinfo();

И нужно обратиться к нему через браузер, ссылка будет выглядеть следующим образом: http://domain.com/x.php

страница phpinfo apcu

Расширение установлено и активировано.

Подключение sqlsrv

В отличие от предыдущих расширений, мы не будем компилировать sqlsrv, а установим бинарный файл из репозитория Microsoft.

Перейдите в каталог cgi-bin для нужного сайта:

$ cd ~/betutorial.ru/public_html/cgi-bin/

Далее скачайте желаемый релиз, мы загрузим актуальную версию:

$ wget https://github.com/microsoft/msphpsql/releases/download/v5.12.0/Linux_5.12.0RTW.tar.gz

На текущий момент последняя версия sqlsrv 5.12, скачать последнюю версию можно из репозитория.

Далее нужно распаковать архив и перейти в распакованный каталог:

$ tar xfv Linux_5.12.0RTW.tar.gz; cd Linux/

Найдите бинарный файл, предназначенный для версии PHP вашего сайта, и переименуйте его:

$ mv SQLSRV_8.3_NTS.so sqlsrv.so

Переместите расширение в каталог cgi-bin, в нашем случае – сайта betutorial.ru:

$ cp sqlsrv.so ~/betutorial.ru/public_html/cgi-bin/

После чего перейдите в этот каталог:

$ cd ~/betutorial.ru/public_html/cgi-bin/

Следующая команда включит расширение в файле php.ini:

$ echo "extension = $(pwd)/sqlsrv.so" >> php.ini

Дальше нужно проверить, что расширение подключилось корректно. Для этого следует добавить в корень сайта файл x.php со следующим содержимым:

<?php phpinfo();

И нужно обратиться к нему через браузер, ссылка будет выглядеть следующим образом: http://domain.com/x.php

страница phpinfo sqlsrv

Расширение установлено и активировано.

Резюмируя, сейчас, когда PHP удерживает 73,6% рынка веб-разработки, компиляция и настройка PHP-расширений позволяют гибко адаптировать среду под конкретные задачи – например, подключить редкий драйвер для базы данных или оптимизировать код для высокой нагрузки.

Если возникнут вопросы, напишите нам, пожалуйста, обращение в панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить настройку PHP на сервере или наши продукты с коллегами по цеху и сотрудниками Beget – ждем вас в нашем сообществе в Telegram.

Теги: