9

如果安装了 PECL 扩展,我如何从 PHP 代码中获取?

我想优雅地处理未安装扩展的情况。

4

4 回答 4

7

我认为正常的方法是使用extension-loaded

if (!extension_loaded('gd')) {
    // If you want to try load the extension at runtime, use this code:
    if (!dl('gd.so')) {
        exit;
    }
}
于 2013-05-17T15:41:16.687 回答
6

get_loaded_extensions符合要求。

像这样使用:

$ext_loaded = in_array('redis', get_loaded_extensions(), true);
于 2013-05-17T15:33:25.163 回答
4

你看过get_extension_funcs吗?

于 2013-05-17T15:29:55.390 回答
2

结合不同的方式。您可以只检查类的存在,甚至是一个函数:class_exists、、function_existsget_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
}
于 2013-05-17T15:31:39.017 回答