PHP扩展安装关键在匹配安装方式:源码编译需对应phpize和php-config;包管理器要区分系统及PHP版本后缀;Docker推荐docker-php-ext-install分层处理;务必确认CLI与FPM配置路径分离并重启对应服务。
PHP 扩展安装本身不难,难在装错版本、漏依赖、路径混乱、重启服务遗漏——批量装更是容易出错。直接用包管理器或编译安装都可能翻车,关键得看你的 PHP 是怎么装的。
怎么看 PHP 是怎么装的?php -i | grep "Configure Command" 必先跑
输出里带 --with-config-file-path 和大量 --enable-xxx 的,基本是源码编译安装;出现 apt、yum 或 brew 字样,大概率是包管理器装的;如果看到 docker 或 phpbrew,那环境隔离性高,不能混用系统级命令。
- 源码编译的 PHP:必须用对应版本的
phpize+./configure --with-php-config=/path/to/php-config - Ubuntu/Debian:
apt install php-extname(如php-mbstring),但注意 PHP 版本后缀,比如php8.2-mysql - CentOS/RHEL 8+:
dnf install php-extname,老版本用yum,但默认仓库扩展少,常要加epel或remi源 -
macOS + Homebrew:
brew install php-extname(如brew install php-redis),但要注意它绑定的是当前brew install php的版本
pecl install 能不能批量装?可以但要绕过交互和权限坑
pecl install 默认每装一个都停住问你“是否启用”,批量时会卡死;而且它生成的 .so 文件路径、extension= 行写法,不同 PHP 版本差异大。
- 跳过交互:
yes '' | pecl install redis igbinary swoole(注意顺序,igbinary要在redis前) - 指定配置文件目录避免乱写:
pecl config-set php_ini /etc/php/8.2/cli/php.ini - 装完别忘了手动检查
extension=redis.so是否已写入,有些版本 PECL 不自动加,或者加到了 CLI 配置却没加到 FPM 配置 -
pecl install装的扩展默认放在$(php -r "echo ini_get('extension_dir');")下,不是所有环境都可写,权限不够就报failed to write
Docker 环境下批量装扩展最稳的方式:用 docker-php-ext-install + apk add 分层处理
官方 php:alpine 和 php:debian 镜像提供了专用脚本,比硬套 pecl 可靠得多,尤其对 gd、pdo_mysql 这类带系统依赖的扩展。