Как проверить, присутствует ли расширение PECL?

Как я могу из PHP-кода, если установлено расширение PECL или нет?

Я хочу, чтобы корректно обработать случай, когда расширение не установлено.

4 ответов


пару разному. Вы можете просто проверить наличие класса или даже функции:class_exists, function_exists и get_extension_funcs:

<?php
if( class_exists( '\Memcached' ) ) {
    // Memcached class is installed
}

// I cant think of an example for `function_exists`, but same idea as above

if( get_extension_funcs( 'memcached' ) === false ) {
    // Memcached isn't installed
}

вы также можете получить супер сложный, и использовать ReflectionExtension. Когда вы его построите, он бросит ReflectionException. Если он не создает исключение, вы можете проверить другие вещи о расширении (например, версию).

<?php
try {
    $extension = new \ReflectionExtension( 'memcached' );
} catch( \ReflectionException $e ) {
    // Extension Not loaded
}

if( $extension->getVersion() < 2 ) {
    // Extension is at least version 2
} else {
    // Extension is only version 1
}

Я думаю, что нормальным способом было бы использовать расширение-loaded.

if (!extension_loaded('gd')) {
    // If you want to try load the extension at runtime, use this code:
    if (!dl('gd.so')) {
        exit;
    }
}

get_loaded_extensions подходит.

используйте так:

$ext_loaded = in_array('redis', get_loaded_extensions(), true);

вы смотрели get_extension_funcs?