2012-08-28 44 views
8

我需要一种方法来查找所有可用的PHP扩展它们是否已加载。我查看了How do I see the extensions loaded by PHP?,但它只解释了如何找到加载的扩展。我想要一种方法来查找卸载的扩展。找到可用的(未加载的)PHP扩展

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

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

+2

一些扩展内置在没有外部文件。 –

+1

只需将扩展库放入目录中并不一定意味着它们是由php加载的。见http://docs.php.net/manual/en/ini.core.php#ini.extension – VolkerK

+0

@matteo Tassinari,怎么样?它是在编译时定义的,还是它本身的一部分? – maazza

回答

2

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

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

+0

列出可用的扩展,感谢这个详尽的答案 – maazza

4

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

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

由于去利玛窦Tassinari。

+0

用于回答自己的+1 –

+0

这是回答问题的方式吗? – kiamlaluno

+0

是否已经启用静态构建扩展?如果问题是关于仍然需要加载的扩展,那么不包括静态链接的扩展。 – kiamlaluno

1

一种方法是检查“的extension_dir”值:

phpinfo(); 

然后扫描目录,看看文件:

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