Listening to the Words

PHP之两种模式下redis扩展

使用homestead作为开发环境,项目需要使用redis,在安装了PHP redis扩展后,使用phpinfo()查看已安装的扩展,看到redis已经被安装完成,使用redis作为缓存数据库时同样能够生效。
但是最近业务使用redis作为队列消息的底层服务器时,遇到了问题;

当执行以下命令,开启守护进程处理队列时(注:thinkphp5框架):

php think queue:work –daemon

出现了 redis扩展未安装的警告提示,跟踪代码发现,是由于extension_loaded函数检测到redis扩展没有加载的原因.

if (!extension_loaded('redis')) {
    throw new Exception('redis扩展未安装');
}

BUT,redis扩展明显已经别安装了,vim /etc/php/7.1/fpm/php.ini命令查看配置,显示reids.so已经被加载了.

于是,找啊找想重装redis扩展,redis作为缓存服务器可以成功使用,通过cli命令行模式怎么就显示不能使用呢?

php -m显示没安装redis扩展,那么?答案就逐渐明显了,命令行模式下和php-fpm模式下,加载的不是同一个php.ini配置.

vim /etc/php/7.1/cli/php.ini
extension=redis.so

重启php服务器,PHP -m 这时就显示 redis扩展已经被安装了/

PHP有两种模式,一个是php-fpm模式通过web服务器运行,另一种是命令行模式(cli),不通过web服务器,它们加载的配置也不相同.

点赞