问题说明

在项目执行过程中,Web服务器Redis 扩展正常工作,但在命令行(CLI)无法加载。

问题分析

如果在使用 Web 服务器(如 Apache 或 Nginx)时 Redis 扩展正常工作,但在命令行(CLI)中 extension_loaded('redis') 显示 false,这通常意味着 Redis 扩展没有在 CLI PHP 环境中安装或启用:

  1. 确认 CLI PHP 版本
    首先,确认在命令行中使用的 PHP 版本与 Web 服务器使用的 PHP 版本是否一致。可以通过在命令行中运行 php -v 来查看 CLI PHP 的版本。
php -v
  1. 检查 CLI php.ini
    CLI PHP 和 Web PHP 通常使用不同的 php.ini 配置文件。找到 CLI PHP 的 php.ini 文件,并检查其中是否启用了 Redis 扩展。通常,CLI php.ini 文件位于与 Web php.ini 不同的位置。通过运行 php --ini 来找到 CLI PHP 使用的 php.ini 文件路径。
php --ini
  1. 启用 CLI Redis 扩展
    在 CLI php.ini 文件中,找到类似 extension=redis.so(在 Linux 上)或 extension=php_redis.dll(在 Windows 上)的行,并确保它没有被注释掉(前面没有 ;)。如果这行不存在,需要添加它,然后保存文件。
  2. 检查扩展目录
    确保 CLI PHP 的 extension_dir 指令指向正确的目录,该目录包含 Redis 扩展的 .so.dll 文件。
  3. 安装或重新编译 Redis 扩展
    如果 CLI PHP 环境中没有 Redis 扩展的 .so.dll 文件,需要安装或重新编译它。你可以使用 PECL(PHP 扩展和应用程序库)来安装 Redis 扩展,或者从源代码编译它。确保为 CLI PHP 环境编译或安装扩展。
  4. 重启命令行会话
    在修改 php.ini 文件或安装新扩展后,需要关闭当前的命令行会话并重新打开一个新的会话,以确保新的配置生效。
  5. 检查权限问题
    确保 CLI PHP 进程有权限读取 Redis 扩展的 .so.dll 文件。
  6. 测试 CLI Redis 扩展
    在命令行中运行一个简单的 PHP 脚本,使用 extension_loaded('redis') 来检查 Redis 扩展是否已加载。例如:
echo '<?php if (extension_loaded("redis")) { echo "Redis extension loaded."; } else { echo "Redis extension not loaded."; } ?>' | php

最后解决方案

  1. 宝塔面板避免多php版本安装;
  2. Redis扩展仅支持一个PHP版本安装使用,若在其它PHP版本已安装redis扩展,请勿再装

宝塔 redis 必须设置密码 才能 监听 宝塔面板 redis_学习

  1. 安装部署宝塔面板→安装php7.1.33→安装Redis 7.0.11→php安装redis扩展→重启(服务器或WEB);

@漏刻有时