【问题标题】:Locate available (not loaded) PHP extensions找到可用(未加载)的 PHP 扩展
【发布时间】:2012-08-22 20:41:26
【问题描述】:

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

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

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

【问题讨论】:

  • 有些扩展是内置的,没有外部文件。
  • 只是将扩展库放在一个目录中并不一定意味着它们是由php加载的。见docs.php.net/manual/en/ini.core.php#ini.extension
  • @matteo Tassinari,怎么样?它是在编译时定义的还是 php 本身的一部分?

标签: php php-extension


【解决方案1】:

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

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

感谢 Matteo Tassinari。

【讨论】:

  • 这会以何种方式回答所提出的问题?
  • 静态构建扩展不是已经启用了吗?如果问题是关于仍有待加载的扩展,则不包括静态链接的扩展。
  • @kiamlaluno 我也很困惑。我不清楚他是在问我的想法,还是 GEOCHET 的想法。
  • @kiamlaluno ,知道 get_loaded_extensions() 不能满足我的需求,这帮助我了解如何通过列出 extension_dir 来列出可用的扩展
【解决方案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 扩展名依赖于文件扩展程序未找到,或无法加载。

【讨论】:

    【解决方案3】:

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

    phpinfo();
    

    然后扫描目录查看文件:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 2020-02-23
      • 2020-06-21
      • 1970-01-01
      • 2018-07-11
      • 2016-09-08
      相关资源
      最近更新 更多