phpstorm中php -m看不到扩展但phpinfo()有,是因为cli与web sapi使用不同php.ini;需分别用php --ini和phpinfo()确认配置路径,并在cli对应php.ini中启用扩展、确保extension_dir路径正确、dll/so文件匹配版本及权限。

PhpStorm 里 php -m 看不到扩展,但浏览器 phpinfo() 有
这不是扩展没装,是 PhpStorm 默认用 CLI SAPI,而浏览器走的是 Apache/Nginx 模块或 PHP-FPM —— 两者加载的 php.ini 完全不同。你必须分别确认:
- 在 PhpStorm 的 Terminal 面板里运行
php --ini,记下Loaded Configuration File路径 - 在浏览器访问
info.php(内容为<?php phpinfo(); ?>),搜索 “Loaded Configuration File”,对比路径是否一致 - 如果不一致,说明 CLI 环境压根没读你改过的那个
php.ini;得去 CLI 对应的 ini 里启用扩展
Windows 下选错 php-cgi.exe 导致扩展全失效
PhpStorm 的 PHP 解释器配置里,php-cgi.exe 看似带 “php” 就能用,但它不支持 CLI 模式,所有 php think、composer、phpunit 类命令都会静默失败,且扩展加载逻辑异常 —— php -m 可能只显示 core 模块。
- 务必选
php.exe(通常在 XAMPP 的\php\php.exe,WAMP 的\bin\php\phpX.Y.Z\php.exe) - 检查该
php.exe对应的php.ini是否存在且路径正确(php --ini输出会告诉你) - 若用 WAMP/XAMPP,它的 GUI 管理器常默认只配 Apache 的 ini,CLI 的 ini 往往是同一目录下未被修改的副本,需手动同步
extension_dir 路径对但扩展仍报错:Windows DLL 版本锁死
Windows 下扩展加载失败,90% 是 DLL 文件和当前 PHP 运行时环境不匹配。不是“路径错了”,而是“根本跑不起来”。关键看三要素:
- 运行
php -v,留意括号里的标识,例如:(NTS x64 Visual C++ 2019)→ 必须用 NTS、x64、VC17 编译的.dll - 进
extension_dir目录,确认文件名是php_curl.dll(不是curl.dll或php-curl.dll) - 某些扩展(如
openssl、curl)依赖系统级 DLL(如libssh2.dll、ssleay32.dll),它们必须放在php.exe同目录,或系统PATH能搜到的地方
Linux/macOS 下权限导致扩展加载静默失败
PHP 在 CLI 下加载扩展时,如果 extension_dir 目录或其中某个 .so 文件权限不足,不会报错,只会跳过 —— php -m 里就看不到它。
- 运行
ls -ld $(php -r "echo ini_get('extension_dir');"),确保输出含r-x(至少可执行权限,即能进入目录) - 运行
ls -l $(php -r "echo ini_get('extension_dir');")/mysqli.so,确认含r--(可读) - 若用 Homebrew 安装 PHP,有时
extension_dir指向/opt/homebrew/Cellar/php@8.2/8.2.20/lib/php/20220829/,这个路径本身也要有x权限才能遍历 - SELinux 或 AppArmor 启用时,也可能拦截扩展加载,临时禁用可验证(
sudo setenforce 0)
最易被忽略的一点:ThinkPHP、Laravel 等框架的命令行自检(比如 php think optimize:schema)完全不看 php.ini 里写了什么,只信 extension_loaded('mbstring') 的运行时返回值。哪怕 ini 配置全对,只要底层因依赖缺失、位数不匹配、权限不足导致扩展没真正载入,就会卡住报错 —— 所以别只查配置,要查 php -m 和 php -i | grep extension_dir 的实时输出。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











