php.ini中扩展加载行须置于[php]段落后、取消注释,windows用.dll、linux/macos用.so;路径错误或后缀不符将静默失败,且需确认cli与web环境使用同一配置文件并重启对应服务。

php.ini 里 extension=xxx.so 或 extension=xxx.dll 怎么写才生效
扩展加载行必须放在 php.ini 的 [PHP] 段落之后、且不能被分号 ; 注释掉;Windows 下用 .dll,Linux/macOS 用 .so,路径错误或后缀写反都会静默失败。
- 确认 PHP 实际读取的配置文件:运行
php --ini查看Loaded Configuration File路径,别改错文件 - 扩展名不带路径时,PHP 默认从
extension_dir目录找,可用php -i | grep extension_dir确认该值 - 如果扩展在自定义路径(如
/usr/local/php/ext/redis.so),必须写成extension="/usr/local/php/ext/redis.so",引号不能省 - 部分扩展(如
opcache)需放在其他扩展之前加载,顺序错可能导致启动失败
修改 php.ini 后为什么 php -v 没报错但 phpinfo() 不显示扩展
常见原因是 PHP CLI 和 Web SAPI(如 Apache 或 FPM)使用了不同的 php.ini 文件。命令行启用了,不代表网页环境也启用了。
- CLI 模式下运行
php -m | grep redis看是否在模块列表里 - Web 环境中建一个
info.php,内容为<?php phpinfo(); ?>,浏览器打开后搜索扩展名,确认「Loaded Configuration File」路径和 CLI 是否一致 - Apache 用户需重启
httpd或apache2;PHP-FPM 用户需重启php-fpm进程,不是 reload 就够——有些版本 reload 不重读php.ini - 扩展依赖其他库(如
gd依赖libpng)但系统没装,PHP 不报错也不加载,用ldd /path/to/your.so | grep "not found"检查
如何判断扩展是否真的初始化成功(不只是加载)
加载成功 ≠ 功能可用。有些扩展需要额外配置项(如 curl.cainfo、pdo_mysql.default_socket)才能正常工作,否则函数调用会报错或返回空。
新秀企业网站系统PHP版是一款简洁易用、方便二次开发的PHP企业网站系统。后台功能齐全,操作简便,可开启伪静态和纯静态模式,有利于SEO优化;前台可设置成同时显示多国语言,适合用于外贸企业建站;程序代码清晰简洁,可扩展性良好,安全可靠。新秀企业网站系统PHP版可免费下载使用,可用于商业用途,没有功能和时效限制,除版权标识外,所有代码都允许修改。后台功能简介:1.基本设置:基本信息,联系方式,网站设
- 用
extension_loaded('mysqli')或function_exists('mysqli_connect')在脚本里验证,比只看phpinfo()更可靠 - 对扩展特有函数做最小调用测试:比如
json_last_error()存在且返回 int,说明json扩展就绪;new Redis()能实例化说明redis扩展已初始化 - 某些扩展(如
apcu)需检查 ini 中是否禁用了apc.enabled=1,光加载.so不开开关也没用
Windows 下 php_xxx.dll 找不到或提示“找不到指定模块”
这不是路径问题,而是 DLL 依赖缺失。PHP 官方二进制包自带的 php_*.dll 多数依赖 Visual C++ 运行库(VC15/VC17),且和 PHP 编译版本严格对应。
立即学习“PHP免费学习笔记(深入)”;
- 用
php -v看输出首行,如PHP 8.2.12 (cli) (built: Sep 12 2023 12:34:56) (ZTS Visual C++ 2022),说明需安装 VC++ 2022 x64 运行库 - 不要混用非官方扩展(如 PECL 下载的 DLL)和官方 PHP 包,ABI 不兼容会导致崩溃
- 用 Dependency Walker(或更现代的
Dependencies.exe)打开 DLL,看红色标记的缺失模块,通常是VCRUNTIME140.dll、MSVCP140.dll等
php --ini 和 php -m 对两次,比反复重启服务有用得多。










