致命错误:未找到类'Redis'

n3schb8v  于 2023-06-21  发布在  Redis
关注(0)|答案(6)|浏览(164)

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

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

这是从命令行工作正常,但不是从Web浏览器。
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...)工作正常
我花了几个小时在谷歌上,但没有找到任何有用的东西。

xyhw6mcr

xyhw6mcr1#

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

sudo apt-get install php-redis
blpfk2vs

blpfk2vs2#

TLDR;
在Ubuntu 16.04上使用NGINX和PHP 7,我发现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()时,我都会收到与问题中相同的错误(...未找到类'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部分“Additional .ini files parsed”中加载。
我现在看到的问题是,重启NGINX并没有重启PHP-FPM。使用ps aux | grep php-fpm查看在我停止NGINX时是否有任何PHP-FPM进程正在运行,证实了我的怀疑。因为重新加载PHP模块需要重新启动,所以除了Nginx重新启动之外,还需要
**重新启动PHP-FPM。

r55awzrz

r55awzrz3#

手动安装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复制

ohfgkhjo

ohfgkhjo4#

composer require 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_'),
    ],
]
dtcbnfnu

dtcbnfnu5#

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

tcomlyy6

tcomlyy66#

我试了试答案,但还是出错了。这就是我如何解决它。
步骤1:检查phpinfo方法启用的PHP版本。通常会同时安装多个版本的php。您需要确保我们正在安装正确版本的扩展
第2步:而不是运行下面的命令

sudo apt-get install php-redis

尝试运行以下版本特定的命令(在我的情况下,我有php8.1php8.2,系统默认为php8.2,而php8.1是活动和启用的。

sudo apt-get install php8.1-redis

这就是全部。重启web服务器后,php可以访问redis类。

相关问题