php -m有但extension_loaded()返回false,根本原因是cli与web sapi使用不同php二进制、配置文件或extension_dir路径;需分别检查php -i和phpinfo()中“loaded configuration file”路径是否一致,并确认extension_dir下对应.so文件存在且拼写正确(小写无后缀)。

php -m 里有名字,但 extension_loaded() 返回 false?
这是最典型的“看似装了实则没用”现象。根本原因不是检测方法错,而是 CLI 和 Web SAPI 加载了不同配置、不同 PHP 二进制或不同 extension_dir。
- 运行
php -i | grep "Loaded Configuration File"查 CLI 实际读的 php.ini 路径 - 在 Web 环境中访问
<?php phpinfo(); ?>页面,搜索 “Loaded Configuration File”,对比路径是否一致 - 若不一致,Web 可能还在用旧版 PHP(比如
/usr/bin/php7.4),而php -m调的是新装的/usr/local/bin/php - 即使路径相同,也要确认
extension_dir指向的目录下真有对应文件:ls -l $(php -r "echo ini_get('extension_dir');")/redis.so
extension_loaded('xxx') 总是 false?先看拼写和后缀
这个函数对参数极其敏感:必须小写、无后缀、无空格,且大小写完全匹配扩展内部注册名。
- 正确写法:
extension_loaded('curl')、extension_loaded('mbstring')、extension_loaded('pdo_mysql') - 错误写法:
extension_loaded('CURL')、extension_loaded('curl.so')、extension_loaded('PDO_MYSQL') - 注意:有些扩展名和命令行显示名不同,比如
php -m显示zip,但实际加载名是zip;而php -m显示mysqli,加载名也是mysqli,不是mysql - PHP 8.5.5 中已移除
mysql扩展,若代码里还用extension_loaded('mysql'),永远返回 false
ldd 或 objdump 报 “undefined symbol”?依赖库没装全
扩展本身存在,但启动时报符号缺失,说明它依赖的系统级共享库(如 libhiredis、libpng)未就位。这类问题在 redis、gd、imagick 等扩展上高频出现。
- 定位扩展文件:
php -r "echo ini_get('extension_dir');",然后进入该目录 - 执行:
ldd redis.so | grep "not found"(Linux)或otool -L gd.so(macOS) - 常见缺失项:
libhiredis.so.1(redis)、libpng16.so.16(gd)、libjpeg.so.8(gd) - Ubuntu/Debian:用
sudo apt install libhiredis1 libpng16-16 libjpeg-turbo8补齐 - CentOS/RHEL:对应安装
hiredis、libpng、libjpeg-turbo包
phpinfo() 里压根没出现扩展名?Zend API 版本不匹配
PHP 8.5.5 的 Zend API 号是 20240807。如果扩展是用 PHP 8.2(API 20220829)或更早版本编译的,它会被静默跳过——不报错、不加载、也不出现在 phpinfo() 里。
- 查当前 PHP 的 API 号:
php -r "echo ZEND_MODULE_API_NO;"→ 应输出20240807 - 查扩展文件绑定的 API 号(Linux):
objdump -s -j .rodata redis.so | grep -a '20[0-9]\{6\}' - 两者不一致,就必须换对应 PHP 8.5 编译的扩展包;PECL 安装时务必加
--with-php-config=/path/to/php85/bin/php-config - Windows 下直接看 DLL 文件名:必须含
-8.5-且标明ts/nts与 VC 版本(如vs19)
mysql),且对 extension_dir 路径合法性校验更严——相对路径、末尾斜杠缺失、权限为 600 都会导致加载失败,但错误日志里可能只打印一句 “failed to open stream”。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











