当前位置: 首页 > 知识库问答 >
问题:

amh - pecl_redis 怎么安装不了?

郦何平
2026-01-21

pecl_redis 怎么安装不了

cc -I. -I/tmp/redis-6.3.0 -I/tmp/redis-6.3.0/include -I/tmp/redis-6.3.0/main -I/tmp/redis-6.3.0 -I/usr/local/php-8.3/include/php -I/usr/local/php-8.3/include/php/main -I/usr/local/php-8.3/include/ph
p/TSRM -I/usr/local/php-8.3/include/php/Zend -I/usr/local/php-8.3/include/php/ext -I/usr/local/php-8.3/include/php/ext/date/lib -I/usr/local/php-8.3/include/php/ext -DHAVE_CONFIG_H -g -O2 -D_GNU_SOUR
CE -DZEND_COMPILE_DL_EXT=1 -c /tmp/redis-6.3.0/redis.c -MMD -MF redis.dep -MT redis.lo -fPIC -DPIC -o .libs/redis.o
In file included from /tmp/redis-6.3.0/redis_cluster.h:4:0,
from /tmp/redis-6.3.0/redis.c:27:
/tmp/redis-6.3.0/cluster_library.h:381:31: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
REDIS_NODISCARD PHP_REDIS_API int cluster_map_keyspace(redisCluster *c);
^
make: * [redis.lo] Error 1
mv: cannot stat '/usr/local/php-8.3/lib/php/extensions/no-debug-non-zts-20230831/redis.so': No such file or directory

共有1个答案

危钱明
2026-01-21

从编译错误来看,问题出在 REDIS_NODISCARD 宏与 PHP 8.3 的兼容性上。以下是解决方案:


解决方法

  1. 安装兼容版本
    当前 pecl install redis 默认安装的 6.x 版本可能与 PHP 8.3 存在兼容问题。降级安装 5.3.7(稳定兼容版本):

    pecl install redis-5.3.7
  2. 或手动编译最新开发版
    从 GitHub 拉取修复了 PHP 8.3 兼容性的代码:

    git clone https://github.com/phpredis/phpredis.git
    cd phpredis
    phpize
    ./configure
    make && make install
  3. 确认安装后配置
    php.ini 中启用扩展:

    extension=redis.so

错误原因解析

  • 关键报错error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
    此错误表明编译器无法识别 REDIS_NODISCARD 宏。该宏在 PHP 8.3 中可能因属性语法变化失效。
  • 版本冲突:Redis 扩展 6.x 在 PHP 8.3 下存在已知兼容问题,而 5.3.7 已通过测试。

验证是否成功

运行以下命令检查扩展状态:

php -i | grep redis

应输出类似:

redis
Redis Support => enabled
Redis Version => 5.3.7
注意:若使用手动编译,确保 make installredis.so 文件被复制到 PHP 扩展目录(路径见 php -i | grep extension_dir)。
 类似资料: