You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下PHP无法连接Redis的问题排查求助

PHP容器无法加载Redis扩展导致Session连接失败

错误信息

PHP Warning:  PHP Startup: Unable to load dynamic library 'redis.so' (tried: /usr/lib/php/20190902/redis.so (/usr/lib/php/20190902/redis.so: undefined symbol: php_json_decode_ex), /usr/lib/php/20190902/redis.so.so (/usr/lib/php/20190902/redis.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP Notice:  session_start(): Redis not available while creating session_id in /var/www/html/index.php on line 2
PHP Warning:  session_start(): Failed to read session data: redis (path: tcp://localhost:6379) in /var/www/html/index.php on line 2
string(0) ""
save_handler=redis
save_path=tcp://localhost:6379
session_id=

执行的PHP文件内容

<?php
session_start();

ini_set('session.cookie-domain', 'localhost');

var_dump(session_id());
echo "save_handler=" . ini_get("session.save_handler") . "\n";
echo "save_path=" . ini_get("session.save_path") . "\n";
echo "session_id=" . session_id() . "\n";

$_SESSION['libname'] = "PhpRedis";
?>

php.ini相关配置片段

[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
session.save_handler = redis
session.save_path = "tcp://localhost:6379"

;verifying redis extension module
extension = redis.so

; default redis timeout
redis.timeout = 5

补充信息

  • 已在PHP容器内通过redis-cli执行ping命令返回pong,Redis连接正常
  • redis.so路径为~/usr/lib/php/20190902/redis.so
  • 使用Apache2服务器,php.ini路径为~/etc/php/7.4/apache2/php.ini

解决方案

1. 修复Redis扩展依赖问题

错误提示undefined symbol: php_json_decode_ex,说明Redis扩展依赖PHP的JSON扩展,但JSON扩展未先于Redis加载。修改php.ini,将JSON扩展的加载放在Redis扩展之前:

extension = json.so
extension = redis.so

2. 确认Redis扩展与PHP版本匹配

当前使用PHP7.4,需确保安装的Redis扩展是针对PHP7.4编译的版本。可以通过以下命令检查扩展兼容性:

php -i | grep "PHP Version"
php -r "var_dump(extension_loaded('redis'));"

如果返回bool(false),说明扩展版本不兼容,需重新下载对应PHP7.4的Redis扩展。

3. 修正扩展文件路径

错误中PHP尝试加载/usr/lib/php/20190902/redis.so,但你提供的路径是~/usr/lib/php/20190902/redis.so(~代表当前用户家目录)。需确认文件实际绝对路径:

ls -l /usr/lib/php/20190902/redis.so

如果文件不存在,将php.ini中的extension配置改为正确的绝对路径,例如:

extension = /home/your-user/usr/lib/php/20190902/redis.so

4. 重启Apache服务

修改配置后,重启Apache使配置生效:

service apache2 restart

内容的提问来源于stack exchange,提问作者show_2083

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:58:30