必须改的三处是:extension_dir路径正确、extension=xxx启用无注释、extension=pdo在pdo_mysql等依赖扩展之前;否则扩展无法加载。

php.ini 里必须改的三处配置项
不改这三项,扩展根本加载不起来。核心就三点:extension_dir 路径是否对、extension=xxx 是否启用、extension=pdo 是否在依赖扩展之前。
-
extension_dir必须指向真实存在的目录,且 PHP 进程有读权限;Linux 常见值是/usr/lib/php/20220829/(数字随 PHP 版本变),Windows 是"C:\php\ext"或相对路径"ext" -
extension=行不能带分号注释,拼写必须和文件名完全一致:Linux 用extension=mysqli.so,Windows 用extension=mysqli(PHP 7.2+ 支持省略.dll)或extension=php_mysqli.dll - PDO 类扩展(如
pdo_mysql)必须确保extension=pdo已启用,且写在它前面;顺序错会导致Driver not found错误
为什么 php -m 显示模块却 Class not found
这是最典型的“假成功”——扩展加载了,但类没注册。常见于 PECL 扩展编译时漏选项,或依赖未满足。
-
redis扩展若启用了--enable-redis-igbinary,但没装igbinary,new Redis()就会报Class 'Redis' not found -
memcached扩展依赖系统级libmemcached库,Linux 下缺这个包,即使php -m | grep memcached有输出,调用也会失败 - 验证不能只靠
php -m,得写测试脚本:<?php var_dump(class_exists('PDO')); ?>或var_dump(function_exists('mysqli_connect'));
CLI 和 Web 环境用的是两个 php.ini
改完一个,另一个照旧报错,是新手踩坑最高频的原因。Apache、Nginx、PHP-FPM、命令行各自加载自己的配置文件,互不影响。
- 查 CLI 配置:运行
php --ini,看Loaded Configuration File - 查 Web 配置:建
info.php,内容为<?php phpinfo(); ?>,浏览器打开后搜Loaded Configuration File - 常见错配场景:用
apt install php-mysql装的扩展,默认只写进 Apache 的 php.ini;而你用php -S启动内置服务器时,走的是 CLI 的配置,自然找不到mysqli
Windows 下 DLL 文件匹配错一个参数就失败
不是版本号对就行,TS/NTS、x86/x64、VC 运行库版本全得严丝合缝。少一个,php -v 就直接报 PHP Warning: PHP Startup: Unable to load dynamic library。
- 先跑
phpinfo(),确认Thread Safety是 Enabled(TS)还是 Disabled(NTS),以及Architecture是 x64 还是 x86 - 去 PECL 官方 Windows 构建页 下载对应组合的 zip,比如
redis-5.3.7-82-ts-vc15-x64.zip中的82表示 PHP 8.2,ts表示线程安全,vc15对应 VS2017 编译器 - 别手动改
extension_dir指向绝对路径再放 DLL;更稳妥的是把 DLL 放进默认ext目录,然后设extension_dir = "ext"(相对路径)
sudo systemctl restart apache2,PHP-FPM 是 sudo systemctl restart php8.2-fpm,Windows 下是重启 IIS 或 Apache 服务。漏掉这个,所有配置都是白改。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











