问题说明
在项目执行过程中,Web服务器Redis 扩展正常工作,但在命令行(CLI)无法加载。
问题分析
如果在使用 Web 服务器(如 Apache 或 Nginx)时 Redis 扩展正常工作,但在命令行(CLI)中 extension_loaded('redis')
显示 false
,这通常意味着 Redis 扩展没有在 CLI PHP 环境中安装或启用:
- 确认 CLI PHP 版本:
首先,确认在命令行中使用的 PHP 版本与 Web 服务器使用的 PHP 版本是否一致。可以通过在命令行中运行php -v
来查看 CLI PHP 的版本。
php -v
- 检查 CLI php.ini:
CLI PHP 和 Web PHP 通常使用不同的php.ini
配置文件。找到 CLI PHP 的php.ini
文件,并检查其中是否启用了 Redis 扩展。通常,CLIphp.ini
文件位于与 Webphp.ini
不同的位置。通过运行php --ini
来找到 CLI PHP 使用的php.ini
文件路径。
php --ini
- 启用 CLI Redis 扩展:
在 CLIphp.ini
文件中,找到类似extension=redis.so
(在 Linux 上)或extension=php_redis.dll
(在 Windows 上)的行,并确保它没有被注释掉(前面没有;
)。如果这行不存在,需要添加它,然后保存文件。 - 检查扩展目录:
确保 CLI PHP 的extension_dir
指令指向正确的目录,该目录包含 Redis 扩展的.so
或.dll
文件。 - 安装或重新编译 Redis 扩展:
如果 CLI PHP 环境中没有 Redis 扩展的.so
或.dll
文件,需要安装或重新编译它。你可以使用 PECL(PHP 扩展和应用程序库)来安装 Redis 扩展,或者从源代码编译它。确保为 CLI PHP 环境编译或安装扩展。 - 重启命令行会话:
在修改php.ini
文件或安装新扩展后,需要关闭当前的命令行会话并重新打开一个新的会话,以确保新的配置生效。 - 检查权限问题:
确保 CLI PHP 进程有权限读取 Redis 扩展的.so
或.dll
文件。 - 测试 CLI Redis 扩展:
在命令行中运行一个简单的 PHP 脚本,使用extension_loaded('redis')
来检查 Redis 扩展是否已加载。例如:
echo '<?php if (extension_loaded("redis")) { echo "Redis extension loaded."; } else { echo "Redis extension not loaded."; } ?>' | php
最后解决方案
- 宝塔面板避免多php版本安装;
- Redis扩展仅支持一个PHP版本安装使用,若在其它PHP版本已安装redis扩展,请勿再装
- 安装部署宝塔面板→安装php7.1.33→安装Redis 7.0.11→php安装redis扩展→重启(服务器或WEB);
@漏刻有时