Установка расширений PHP через пакетные менеджеры

Раздел: администрирование PHP -> установка расширений

Установка PHP пакетов: расширения и библиотеки

Как установить PHP библиотеку с помощью Composer?

Наиболее эффективный способ управления зависимостями в современных проектах - использование менеджера пакетов Composer. Он автоматически загружает библиотеки, разрешает зависимости и генерирует автозагрузчик.

composer require monolog/monolog

Php packages (пакеты php)

После выполнения команды в каталоге проекта появляется папка vendor, файл composer.json и composer.lock. Для подключения библиотеки в коде достаточно:

require __DIR__ . '/vendor/autoload.php';

$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->warning('Сообщение');

Типичные ошибки:

  • Ошибка Could not open input file: composer.json - команду
  • Конфликты версий - обновление через composer update с корректировкой требований.
  • Проблемы с правами доступа к папке vendor - проверка владельца или использование --no-dev в production.

Как установить PHP расширение через PECL?

PECL (PHP Extension Community Library) предназначен для установки C-расширений, написанных на C, которые встраиваются в интерпретатор. Требует наличия phpize и php-config.

pecl install xdebug
# Затем добавить в php.ini:
zend_extension=xdebug.so

После установки расширение доступно во всех скриптах без дополнительных require. Подходит для таких расширений, как xdebug, apcu, imagick.

Частая проблема: отсутствие заголовочных файлов PHP. Решение - установить пакет php-dev или php*-dev.

Как установить библиотеку вручную без Composer?

Если требуется использовать единичную библиотеку без управления зависимостями, можно скачать её исходный код и подключить вручную.

// Скачать ZIP-архив библиотеки и распаковать в папку lib
require_once 'lib/php-jwt/src/JWT.php';

use Firebase\JWT\JWT;
$token = JWT::encode(['user' => 1], 'secret');

Минусы - отсутствие автозагрузки и контроля версий. Подходит для очень простых случаев или legacy проектов.

Ошибка Class not found - требуется вручную подключать все файлы или реализовать простой автозагрузчик.

Как установить PHP библиотеку через системный менеджер пакетов?

В Debian/Ubuntu можно установить готовые PHP-пакеты из репозитория, например php-mbstring, php-xml. Это актуально для расширений, поставляемых вместе с PHP.

sudo apt install php-mbstring php-xml php-curl

После установки необходимо убедиться, что модуль загружен (через php -m). Подходит для встроенных расширений, но не для сторонних библиотек, которые лучше ставить через Composer.

Несоответствие версии PHP (например, модуль для PHP 8.0, а установлен PHP 8.1). Решение - указать точную версию, например php8.1-mbstring.

Расширенные примеры установки и использования PHP пакетов

Пример 1: Установка конкретной версии пакета через Composer

Пример
composer require "guzzlehttp/guzzle:^7.0"
composer require "symfony/console:5.4.*"

Composer автоматически добавит запись в composer.json и установит совместимые зависимости. После установки можно проверить актуальное дерево:

composer show --tree
# вывод:
# guzzlehttp/guzzle 7.8.1 Guzzle is a PHP HTTP client library
# └──psr/http-client 1.0.3
# └── ...

Пример 2: Глобальная установка инструмента (например, PHP_CodeSniffer)

Пример
composer global require squizlabs/php_codesniffer
export PATH="$HOME/.composer/vendor/bin:$PATH"
# Теперь можно выполнять:
phpcs --version

Глобальная установка удобна для утилит командной строки. Однако она может конфликтовать с версиями в проектах, поэтому лучше использовать --dev и локальные autoload.

Пример 3: Создание собственного composer.json с зависимостями

Пример
{
  "require": {
    "php": ">=8.0",
    "monolog/monolog": "^3.0",
    "vlucas/phpdotenv": "^5.0"
  },
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  }
}
# Выполнить:
composer install

Автозагрузчик psr-4 загрузит все классы из пространства имен App, расположенные в папке src. Пример использования:

Пример
require 'vendor/autoload.php';

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

echo $_ENV['DB_HOST'];
localhost

Пример 4: Установка PECL расширения с дополнительными опциями

Пример
# Установка redis с поддержкой igbinary
pecl install -D "enable-redis-igbinary=yes" redis

# Проверка:
php -r "echo extension_loaded('redis') ? 'OK' : 'FAIL';"
OK

Некоторые расширения требуют специфических флагов. Ошибка configure: error - отсутствие библиотек (libhiredis для redis). Решение: sudo apt install libhiredis-dev.

Пример 5: Ручная установка PHP библиотеки с простым автозагрузчиком

Пример
// Простейший autoload для одной библиотеки
spl_autoload_register(function ($class) {
    $prefix = 'MyLib\\';
    $base_dir = __DIR__ . '/mylib/src/';
    $len = strlen($prefix);
    if (strncmp($prefix, $class, $len) !== 0) return;
    $relative_class = substr($class, $len);
    $file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
    if (file_exists($file)) require $file;
});

use MyLib\Calculator;
echo Calculator::add(2, 3);
5

Без автозагрузчика пришлось бы писать много require. Такой подход подходит для очень маленьких проектов.

пакеты PHP - comments

En
Php packages (php)