Как проверить на подключение расширений PHP?
В данный момент есть такая проверка, не очень удобная
Как правильно ее организовать, но при этом чтобы легко можно было добавлять или отключать проверки (без удаления)?
В каком то простом виде, чтобы быстро подключать на разные сайты, где сайты с разными требованиями к расширениям
$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!');
}
Ответы (2 шт):
Ну как вариант сделать что то похожее:
$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 то что ты хочешь отключить и в теории должно быть всё как надо
Современный способ разработки на 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 - желательно на английском. Русская версия давно не обновлялась.