我已经在我的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...)工作正常
我花了几个小时在谷歌上,但没有找到任何有用的东西。
6条答案
按热度按时间xyhw6mcr1#
你安装了redis但没有安装php-redis。你可以简单地运行下面的命令来安装php-redis
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。r55awzrz3#
手动安装PhpRedis解决了这个问题
从Rico's Tech Memo复制
ohfgkhjo4#
composer require predis/predis
然后在app/config/database.php中添加“predis”:
dtcbnfnu5#
确保从那里安装一个稳定版本的redis:https://pecl.php.net/package/redis
tcomlyy66#
我试了试答案,但还是出错了。这就是我如何解决它。
步骤1:检查phpinfo方法启用的PHP版本。通常会同时安装多个版本的php。您需要确保我们正在安装正确版本的扩展
第2步:而不是运行下面的命令
尝试运行以下版本特定的命令(在我的情况下,我有
php8.1
和php8.2
,系统默认为php8.2
,而php8.1
是活动和启用的。这就是全部。重启web服务器后,php可以访问redis类。