Как проверить на подключение расширений PHP?

Рейтинг: 0Ответов: 2Опубликовано: 11.04.2023

В данный момент есть такая проверка, не очень удобная

Как правильно ее организовать, но при этом чтобы легко можно было добавлять или отключать проверки (без удаления)?

В каком то простом виде, чтобы быстро подключать на разные сайты, где сайты с разными требованиями к расширениям

$extensions = get_loaded_extensions();

if (!in_array('openssl', $extensions)) {
    exit('Extension "openssl" not loaded!');
}
if (!in_array('sqlite3', $extensions)) {
    exit('Extension "sqlite3" not loaded!');
}
if (!in_array('pdo_sqlite', $extensions)) {
    exit('Extension "pdo_sqlite" not loaded!');
}
if (!in_array('libxml', $extensions)) {
    exit('Extension "libxml" not loaded!');
}
if (!in_array('iconv', $extensions)) {
    exit('Extension "iconv" not loaded!');
}
if (!in_array('ctype', $extensions)) {
    exit('Extension "ctype" not loaded!');
}
if (!in_array('zlib', $extensions)) {
    exit('Extension "zlib" not loaded!');
}

Ответы

▲ 1Принят

Ну как вариант сделать что то похожее:

$requiredExtensions = [
    'openssl',
    'sqlite3',
    'pdo_sqlite',
    'libxml',
    'iconv',
    'ctype',
    'zlib',
];

$disabledExtensions = [
    // 'sqlite3', // Раскомментируйте строку, чтобы отключить проверку для данного расширения
];

$loadedExtensions = get_loaded_extensions();

foreach ($requiredExtensions as $extension) {
    checkExtension($extension, $loadedExtensions, $disabledExtensions);
}

function checkExtension($extension, $loadedExtensions, $disabledExtensions) {
    if (in_array($extension, $disabledExtensions)) {
        return;
    }

    if (!in_array($extension, $loadedExtensions)) {
        exit("Extension \"{$extension}\" not loaded!");
    }
}

Просто добавляй в $disabledExtensions то что ты хочешь отключить и в теории должно быть всё как надо

▲ 1

Современный способ разработки на PHP - использовать composer. С его помощью ставятся пакеты (библиотеки) из Packagist. На сайте composer написано как его установить и использовать в работе.

Теперь по проблеме: как проверять наличие расширений. При установке пакетов composer install проверяется наличие необходимых зависимостей: версия PHP, наличие модулей, совместимость пакетов.

Теперь остается добавить в секцию require необходимые зависимости:

composer require ext-openssl ext-sqlite3 \
ext-pdo_sqlite ext-libxml ext-iconv ext-ctype ext-zlib

В результате в composer.json добавится эта часть:

"require": {
    "php": "^8.1",
    "ext-ctype": "*",
    "ext-iconv": "*",
    "ext-libxml": "*",
    "ext-openssl": "*",
    "ext-pdo_sqlite": "*",
    "ext-sqlite3": "*",
    "ext-zlib": "*"
}

В принципе, ее можно добавить и вручную, и IDE даже может подсказать точное название. Просто вводите "ext-...". Но тогда еще нужно обновить или удалить composer.lock, в котором перечислены точные версии.

Я для примера добавил требование расширения "ext-aerospike", которого у меня нет. Тогда composer install выводит сообщение об ошибке:

  Problem 1
    - Root composer.json requires PHP extension ext-aerospike * but 
      it is missing from your system. Install or enable PHP's aerospike extension.

только месяц назад начал изучать, пока сложно понимать как все устроено

Тогда ознакомьтесь с PHP The Right Way - желательно на английском. Русская версия давно не обновлялась.