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
相关产品推荐
相关产品推荐

