找到可用(未加载)的PHP扩展


Locate available (not loaded) PHP extensions

我需要一种方法来找到所有可用的PHP扩展,无论它们是否已加载。我看了如何查看PHP加载的扩展?但它只解释了如何找到加载的扩展。我也想找到一种方法来查找卸载的扩展。

知道php.ini中的extension_dir后,我做了一个ls /extension_dir/*.so,返回了26个条目。当我尝试使用php -m时,我得到了57个条目。这怎么可能?

我如何知道哪些PHP扩展可以加载?我不想知道哪些是加载的,但哪些是可加载的

请记住,一些扩展可能是静态构建到PHP中的。您将在php.ini中看到这些作为扩展列出,但您不会能够禁用它们,在大多数情况下,您将看不到扩展=在php.ini或.so/.DLL文件中引用它们的行。正在删除静态编译的扩展需要重新编译PHP本身,并且在大多数情况下,这几乎不需要,因为大多数是静态编译的扩展往往包括核心功能,而这些功能很少需要已删除。

http://arr.gr/blog/2012/06/on-php-extensions/

感谢马泰奥·塔西纳里。

如果您想要可能加载的扩展名的列表,您应该获得扩展名等于PHP_SHLIB_SUFFIX的文件的列表,这些文件位于PHP检查PHP扩展名(<install-dir>/lib/php/extensions/<debug-or-not>-<zts-or-not>-ZEND_MODULE_API_NO)的目录中。如果您想避免那些已经加载的扩展名,您应该将扩展名(不带文件扩展名)传递给extension_loaded()。

请记住,具有正确文件扩展名的文件无法作为扩展名从PHP加载,因为该文件没有正确的结构(例如,因为文件已损坏),或者因为PHP扩展名依赖于扩展名找不到的文件,或者无法加载。

一种方法是检查'extension_dir'值:

phpinfo();

然后扫描目录以查看文件:

$exts = scandir("/usr/lib/php5/extension_dir/");
print_r($exts);