【问题标题】:Fatal error: Class 'Redis' not found致命错误:找不到类“Redis”
【发布时间】:2014-10-03 12:30:43
【问题描述】:

我已经在我的 ubuntu 14 服务器上安装了带有 phpredis 扩展的 Redis。我正在使用 Nginx 服务器。我有php测试脚本

$redis=new Redis() or die("Cannot load Redis module.");
$redis->connect('localhost');
$redis->set('random', rand(5000,6000));
echo $redis->get('random');

从命令行可以正常工作,但不能通过网络浏览器。

Nginx 错误日志:

[info] 31102#0: Using 32768KiB of shared memory for push module in /etc/nginx/nginx.conf:82
[error] 31108#0: *21 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Class 'Redis' not found in...

我在phpinfo()也看不到

全部使用 apt-get install 安装

所有其他模块(mysql、imagemagick...)工作正常

我在谷歌上花了几个小时,但没有发现任何有用的东西

【问题讨论】:

    标签: ubuntu nginx redis


    【解决方案1】:

    手动安装 PhpRedis 解决了这个问题

    git clone git://github.com/nicolasff/phpredis.git
    cd phpredis
    phpize
    ./configure
    make
    sudo -s make install
    
    sudo -s
    echo "extension=redis.so">/etc/php5/conf.d/redis.ini
    ln -s /etc/php5/conf.d/redis.ini /etc/php5/fpm/conf.d/20-redis.ini
    exit
    

    复制自Rico's Tech Memo

    【讨论】:

    • 对于 googlers,正如 this issues 中提到的:不再支持 PHP5。 4.3.0 是最后一个适用于旧版本 PHP 的版本。 使用下一个命令克隆正确的分支 git clone -b 4.3.0 --single-branch https://github.com/phpredis/phpredis.git
    【解决方案2】:

    TLDR;
    在使用 NGINX 和 PHP 7 的 Ubuntu 16.04 上,我发现 PHP-FPM 没有重新启动。服务的简单重启对我有用:

    sudo service php-fpm restart
    或者
    sudo service php7.0-fpm restart

    sudo service php5-fpm restart

    您可能需要搜索“restart PHP-FPM”,以防上述任何命令对您不起作用。

    为了提供一些上下文,我使用标准 sudo apt-get install php-redis 安装了 phpredis,并使用 sudo systemctl restart nginx 重新启动了 nginx,但是每当尝试在 PHP 中使用 new Redis() 时,我都会收到与问题相同的错误(... Class 'Redis'未找到...)。

    在 NGINX 服务器上的 PHP 文件中运行 phpinfo(); 时,我可以看到 PHP-FPM 正在从 /etc/php/7.0/fpm/conf.d 加载其他配置(“扫描此目录以获取其他 .ini 文件”部分)。使用简单的ls -al /etc/php/7.0/fpm/conf.d 查看该目录,我可以看到有一个名为20-redis.ini 的符号链接,但该文件未在 phpinfo 部分“已解析的其他 .ini 文件”中加载。

    我现在看到的问题是重启 NGINX 并没有重启 PHP-FPM。当我停止 NGINX 时,使用ps aux | grep php-fpm 查看是否有任何 PHP-FPM 进程正在运行,这证实了我的怀疑。因为重新加载 PHP 模块需要重新启动,所以 PHP-FPM 需要重新启动除了 NGINX 重新启动。

    【讨论】:

    • 在 Ubuntu 18 上,使用它来重新启动 php-fpm sudo systemctl restart php7.2-fpm.service 将“7.2”替换为您的 php 版本。经过数小时的抓挠,上述解决方案在我的服务器上运行。重启 nginx 是不够
    【解决方案3】:

    你已经安装了 redis 但没有安装 php-redis。你可以简单地运行下面的命令来安装 php-redis

    sudo apt-get install php-redis
    

    【讨论】:

    • ...然后重启 php-fpm,如下所示。
    • 这是为我解决的问题,但是 redis 和 php-redis 有什么区别?
    • @abbood redis 在你的服务器上安装 redis。 php-redis 允许您使用 php 拉取和操作 redis 数据。不用php-redis也可以在命令行运行redis。
    • 是否需要以某种方式启用redis php扩展?
    • 做到了。另外,我正在运行 Lumen 的开发服务器。我在安装 php-redia 和 bingo 后杀死它并重新开始。
    【解决方案4】:

    composer 需要 predis/predis

    然后在 app/config/database.php 中添加“predis”:

    'redis' => [
    
        'client' => env('REDIS_CLIENT', 'predis'),
    
        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'redis'),
            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 
                        'laravel'), '_').'_database_'),
        ],
    ]
    

    【讨论】:

      【解决方案5】:

      确保从那里安装稳定版本的 redis:https://pecl.php.net/package/redis

      【讨论】:

        猜你喜欢
        • 2014-10-03
        • 1970-01-01
        • 2011-09-08
        • 2011-12-17
        • 2018-12-21
        • 2012-11-21
        • 2015-03-20
        • 2015-03-28
        • 2014-03-13
        相关资源
        最近更新 更多