推荐优先使用包管理器安装PHP扩展:Ubuntu/Debian执行sudo apt install php-redis php-pdo,CentOS/RHEL/Fedora执行dnf install php-pecl-redis php-pdo;装完后用php -m验证加载,并确保redis-server已启动且可连接。

直接看你的 PHP 版本和包管理器是否支持一键安装——如果用的是 Ubuntu/Debian 且 PHP 是系统包(如 php7.4 或 php8.2),sudo apt install php-redis 和 sudo apt install php-pdo 就够了;CentOS/RHEL 系统则优先试 dnf install php-pecl-redis php-pdo。手动编译只在定制 PHP 或旧系统上才真有必要。
用包管理器装 redis.so 和 pdo.so 最快最稳
绝大多数现代 Linux 发行版已把常用 PHP 扩展打包进官方源,php-redis 和 php-pdo 都是开箱即用的二进制扩展,不用自己跑 phpize、configure、make。
-
apt list --installed | grep php-可确认当前已安装哪些 PHP 包(Ubuntu/Debian) -
dnf list installed | grep php查 CentOS/RHEL/Fedora 已装扩展 - 装完后检查扩展路径:
php -i | grep extension_dir,再ls $(php -i | grep extension_dir | awk '{print $3}')看redis.so和pdo.so是否存在 -
php -m | grep -E '^(redis|pdo)$'直接验证是否已加载
手动编译 redis.so 时 configure 必须指定正确的 php-config
如果你用源码编译的 PHP(比如装在 /opt/php82),apt 装的 php-redis 会失效,必须自己编译。关键不是 phpize,而是 ./configure 时的 --with-php-config 参数必须指向你实际使用的 PHP 的 php-config 文件。
- 先确认路径:
which php-config或/opt/php82/bin/php-config—— 错用系统默认的/usr/bin/php-config会导致扩展加载失败或段错误 - 编译后
make install输出的路径(如/opt/php82/lib/php/extensions/no-debug-non-zts-20220829/)必须和php.ini中的extension_dir一致 -
extension=redis.so必须写在php.ini里,不能只靠extension_dir自动扫描(PHP 不支持) - 别漏掉依赖:
autoconf、gcc、make、php-devel(RHEL)或php-dev(Debian)缺一不可
PDO 扩展启用顺序和驱动加载有硬性要求
pdo.so 是基础模块,但光有它不能连数据库;pdo_mysql.so、pdo_pgsql.so 等才是具体驱动。PHP 加载时强制要求 pdo.so 在所有 PDO 驱动之前加载,否则 new PDO() 会报 Class 'PDO' not found 或连接失败。
立即学习“PHP免费学习笔记(深入)”;
- 在
php.ini中,确保extension=pdo.so出现在extension=pdo_mysql.so之前 - 不要用
extension_dir+ 通配符方式加载,PHP 不识别;每条extension=xxx.so必须显式写出 - 若同时启用了
opcache,修改php.ini后必须重启 PHP-FPM 或 Apache,仅 reload 不生效 -
php -r "print_r(PDO::getAvailableDrivers());"是验证驱动是否真正就绪的唯一可靠方式
最容易被忽略的是:Redis 扩展(redis.so)和 Redis 服务器(redis-server)是两回事。装完扩展不代表 Redis 就能用——你得单独启动 redis-server,并确认 php -r '$r = new Redis(); var_dump($r->connect("127.0.0.1", 6379));' 能返回 true。否则报错 Connection refused,跟扩展本身无关。



















