必须分别验证CLI与Web环境的php.ini路径及扩展加载状态:运行php --ini查CLI配置,访问phpinfo()页面查Web实际加载的ini;php -m仅反映命令行扩展,Web需确认对应SAPI的php.ini中extension=已启用且extension_dir路径正确。

确认当前 PHP 配置文件路径和已加载扩展
别急着改配置,先看清楚 PHP 实际读的是哪份 php.ini,以及哪些扩展已经装好但没启用。很多人改错文件(比如改了 CLI 的 php.ini,而 Web 服务用的是 Apache 或 PHP-FPM 的另一份),结果白忙活。
- 运行
php --ini查看 “Loaded Configuration File” 路径 —— 这是 CLI 模式生效的配置 - 在 Web 环境中,必须访问
<?php phpinfo(); ?>页面,顶部明确写着 “Loaded Configuration File”,这才是 Apache/Nginx + PHP-FPM 实际加载的配置文件 - 运行
php -m | grep -E "curl|gd|mbstring|redis"快速检查 CLI 下已启用的扩展;网页里则靠phpinfo()页面搜索关键词确认状态 - 如果
php --ini显示(none),说明 CLI 没加载任何配置,需手动指定或复制一份标准php.ini到默认路径(如/usr/local/lib/php.ini)
Ubuntu/Debian 下用 apt 安装并启用常见扩展
PHP 8.5.5 在 Ubuntu 24.04+ 上可通过官方仓库直接安装预编译扩展,无需编译,也自动注册到正确路径。这是最稳、最快的方式。
- 先更新源:
sudo apt update - 安装常用扩展(注意包名格式:
php8.5-xxx,不是php-xxx):sudo apt install php8.5-gd php8.5-curl php8.5-mbstring php8.5-xml php8.5-zip php8.5-redis php8.5-sqlite3 - 这些包安装后,会自动在对应 SAPI 的
php.ini(如/etc/php/8.5/apache2/php.ini)里写入extension=xxx行 —— 但部分旧版 apt 包可能只放 .so 文件不自动启用,所以仍建议手动确认 - 重启服务:
sudo systemctl restart apache2(Apache)或sudo systemctl restart php8.5-fpm(Nginx + FPM)
通过 pecl 安装 redis、xdebug 等非标配扩展
pecl 是 PHP 官方扩展分发渠道,适合安装未被系统仓库收录、或需要特定版本的扩展(比如 redis 6.x、xdebug 3.4)。它会编译生成 .so,但不会自动写入 php.ini。
- 确保开发依赖已装:
sudo apt install php8.5-dev build-essential - 执行
pecl install redis(或其他扩展名),安装完成后终端会提示类似extension=redis.so - 找到实际生效的
php.ini(再次强调:以phpinfo()显示的路径为准),在文件末尾添加该行 - 注意路径问题:
pecl install输出的.so通常放在/usr/lib/php/20230831/这类 ABI 版本目录下,若你手动写绝对路径,务必核对是否真实存在 - 重启 PHP 服务后,用
php -r "var_dump(extension_loaded('redis'));"验证是否真加载成功
Windows(XAMPP/WAMP)启用扩展的几个关键细节
Windows 下看似只是取消注释,但实际容易卡在路径、DLL 依赖、SAPI 隔离三处。XAMPP 8.2+ 默认含 PHP 8.5.5,但扩展未必默认启用。
立即学习“PHP免费学习笔记(深入)”;
- 打开
phpinfo()页面,确认 “Loaded Configuration File” 指向C:\xampp\php\php.ini(不是\apache\bin\php.ini) - 编辑该文件,取消注释:
extension=curl、extension=gd、extension=mbstring—— 注意 Windows 不写后缀,也不加引号 - 检查
extension_dir值是否为"ext"(相对路径)或"C:\xampp\php\ext"(绝对路径),结尾不能有反斜杠 - GD 依赖
libpng16.dll、libjpeg-9.dll等,XAMPP 通常自带,但若gd_info()返回空数组,说明 DLL 没被找到,可尝试把它们复制到C:\xampp\apache\bin\ - 改完必须在 XAMPP 控制面板里 **Stop → Start** Apache,点“Restart Modules”无效
真正麻烦的从来不是“怎么装”,而是“装给谁用”——CLI、Apache、PHP-FPM 各自读各自的 php.ini,且扩展启用状态互不影响。哪怕 php -m 显示 redis 已加载,Web 页面仍报 Call to undefined function redis_connect(),八成就是 PHP-FPM 没读对配置文件。每次操作前,先跑一遍 phpinfo(),比反复重启强十倍。



















