phpinfo输出包含扩展信息吗_查看PHP扩展状态方法【检索】

12次阅读

phpinfo()是最直观完整的扩展查看方式,可显示已加载扩展、配置项、版本、状态及依赖;需通过Ctrl+F搜索“Loaded Extensions”等关键词快速定位,注意区分CLI与Web的php.ini路径。

phpinfo输出包含扩展信息吗_查看PHP扩展状态方法【检索】

phpinfo() 输出确实包含扩展信息,而且是最直观、最完整的查看方式之一——它不仅列出已加载的扩展,还显示每个扩展的配置项、版本、启用状态及依赖关系。

怎么用 phpinfo() 快速定位扩展状态

直接在浏览器中访问一个仅含 phpinfo(); 的 PHP 文件(如 info.php),页面会滚动出大量配置数据。关键不是从头看,而是按 Ctrl+F 搜索以下关键词:

  • Loaded Extensions:位于“PHP Credits”之后、“Configuration”之前,是纯扩展名列表(如 mysqlicurlgd
  • 扩展名本身(如 gd):能跳转到该扩展专属区块,看到是否启用、INI 设置路径、编译参数等
  • Loaded Configuration File:点开链接可确认当前生效的 php.ini 路径,避免改错文件

注意:如果页面没出现 Loaded Extensions 区块,说明 PHP 是以 CGI/CLI 模式运行且未启用 display_errors 或被安全策略屏蔽了部分输出——这时应优先转向命令行验证。

php -mget_loaded_extensions() 的区别与适用场景

两者都返回“已加载”的扩展,但底层逻辑不同:

立即学习PHP免费学习笔记(深入)”;

  • php -m:读取 CLI SAPI 下所有已编译+启用的模块,包括被 php.iniextension= 行激活的,也包括静态编译进 PHP 二进制的(如 standardjson)。输出为纯文本列表,适合脚本解析
  • get_loaded_extensions():PHP 运行时函数,只返回当前请求生命周期中真正加载成功的扩展(排除因依赖缺失或配置错误而静默失败的)
  • 常见陷阱:php -m 显示 redis,但 Web 页面里 extension_loaded('redis') 返回 false —— 很可能 CLI 和 Web 使用的是两套 php.ini(比如 apache/etc/php/8.2/apache2/php.ini,而 CLI 用 /etc/php/8.2/cli/php.ini
php -r 'print_r(get_loaded_extensions());'

为什么 extension_loaded() 比查 php.ini 更可靠

很多人习惯打开 php.iniextension= 行来判断扩展是否启用,但这只是“声明”,不等于“生效”。真正决定扩展是否可用的,是运行时加载结果:

  • extension_loaded('mbstring') 返回 true,才代表该扩展函数(如 mb_strlen())能安全调用
  • 某些扩展(如 opcache)在 php.ini 中启用后,还需重启 Web 服务(Apache/nginx + PHP-FPM)才生效;而 dl() 动态加载已被大多数现代 PHP 环境禁用(disable_functions = dl),不可依赖
  • 扩展之间有隐式依赖:比如 pdo_mysql 需要先加载 pdo,否则即使 pdo_mysql.so 存在,extension_loaded('pdo_mysql') 仍为 false

所以线上环境做扩展兼容性检查时,务必用 extension_loaded() 封装关键依赖,而不是读配置文件。

容易被忽略的细节:扩展名大小写与后缀差异

扩展名不是随便写的字符串,必须和 PHP 内部注册名完全一致:

  • linux 下扩展名为 gd,不是 gd2php_gdwindows 下可能是 php_gd2.dll,但 extension_loaded() 参数仍是 'gd'
  • mysql(已废弃)和 mysqli 是两个独立扩展,extension_loaded('mysql') 在 PHP 7.0+ 永远返回 false
  • intl 扩展在某些 docker 镜像中默认不启用,即使 php -m 列出它,也要确认 extension=intl 出现在正确的 php.ini 中,且系统已安装 libicu

最稳妥的方式永远是:先用 php --ini 定位配置文件,再用 php -m | grep -i xxx 粗筛,最后用 php -r "var_dump(extension_loaded('xxx'));" 实锤。

text=ZqhQzanResources