
PHP 8.5.5 是尚未进入主流发行版的开发中版本(截至 2026 年中仍属预发布分支),官方 PECL 包和预编译二进制均**未正式支持**。直接
pecl install redis 或下载
redis-*.zip 会失败,这是常态,不是你操作错了。
php-config 找不到或版本错乱
这是第一步就卡死的高频问题。PHP 8.5.5 几乎全是源码编译安装,
php-config 不在
$PATH 里,或者系统残留旧版 PHP 的
php-config 被误调用。
- 先确认你编译安装 PHP 8.5.5 时指定的
--prefix 路径,比如 /usr/local/php85,那真实 php-config 就在 /usr/local/php85/bin/php-config
- 运行
/usr/local/php85/bin/php-config --version,输出必须是 8.5.5 —— 如果显示 8.3.12 或其他,说明环境变量里混进了别的 PHP
- 临时加进路径:
export PATH=/usr/local/php85/bin:$PATH;长期生效写进 ~/.bashrc 或 /etc/profile
-
pecl 命令依赖 php-config,这步不干净,后面全崩
pecl install redis 编译报 undefined symbol: zend_string_init
这是 ABI 不兼容的明确信号:你装的 redis 扩展源码没适配 PHP 8.5 的内核变更(尤其是 ZTS 模式和字符串结构)。
- 别用
pecl install redis,它拉的是面向 PHP 8.4 的包,PHP 8.5.5 已改 internal API
- 必须用
phpredis 官方仓库的 php8 分支:git clone https://github.com/phpredis/phpredis.git && cd phpredis && git checkout php8
-
phpize 也必须来自 PHP 8.5.5 安装目录,例如 /usr/local/php85/bin/phpize,不能用系统自带的
- configure 时显式指定路径:
./configure --with-php-config=/usr/local/php85/bin/php-config
- 编译完检查依赖:
ldd modules/redis.so | grep php,输出应指向你的 libphp.so(比如 /usr/local/php85/lib/libphp.so),而不是 /usr/lib/x86_64-linux-gnu/libphp.so
extension=redis.so 加了但 php -m 不显示
PHP 8.5.5 对扩展加载路径和顺序更严格,常见原因不是配置写错,而是隐性依赖缺失或路径错位。
- 先查真实扩展目录:
php -i | grep extension_dir,输出类似 /usr/local/php85/lib/php/extensions/no-debug-non-zts-20250801/ —— 注意末尾的 API ID(20250801 是 PHP 8.5 的标识),不是 no-debug-zts-20230831(那是 8.3)
-
redis.so 必须放在这个目录下,不能放错位置,也不能用绝对路径写进 php.ini
- PHP 8.5.5 默认启用 opcache,且
redis 依赖 json 和 sockets,这两个模块必须已启用且顺序在前:php -m | grep -E "^(json|sockets)$",缺一不可
- php.ini 中只写
extension=redis(不带 .so),让 PHP 自动按 extension_dir 查找;写成 extension=/full/path/redis.so 在 8.5.5 下会被拒绝加载
真正麻烦的不是编译命令本身,而是所有环节都得对齐 PHP 8.5.5 的 ABI 标识、ZTS 状态、API ID 和依赖链——漏掉任意一个,
php -m 就安静如鸡,错误日志里甚至不报错,只静默跳过。