Linux中Redis无法启动扩展的问题
今天发现linux服务器的php-fpm出现了一些问题,需要重新启动一下php-fpm,不过在启动php-fpm的时候,redis so 竟然无法进行载入了,我们先来看一下linux服务端的操作,如下:
- [root@brand009 modules]# /usr/sbin/php-fpm
- /usr/sbin/php-fpm: /usr/lib64/libssl.so.10: no version information available (required by /usr/sbin/php-fpm)
- /usr/sbin/php-fpm: /usr/lib64/libcrypto.so.10: no version information available (required by /usr/sbin/php-fpm)
- /usr/sbin/php-fpm: /usr/lib64/libcrypto.so.10: no version information available (required by /usr/sbin/php-fpm)
我们可以看出在重启 php-fpm 的过程中,redis so发生了无法加载的情况,redis如果不能使用的话,整个项目就停顿了下来,好多功能都无法使用,所以这是首要解决的问题,我们通过提示的错误大致能看得出来应该是版本的问题,看 version,所以解决的思路估计和版本有关系,首先查一下 php 的 version 版本,如下:
- php --version
- PHP 5.6.6 (cli) (built: Mar 9 2015 13:27:38)
- Copyright (c) 1997-2015 The PHP Group
- Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
我们可以看到使用的 php 版本为 5.6.6,然后接着查询 php-fpm 的版本,如下:
- $/usr/sbin/php-fpm -v
- PHP 5.3.3 (fpm-fcgi) (built: Oct 30 2014 20:14:56)
- Copyright (c) 1997-2012 The PHP Group
- Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
php-fpm 的版本为5.3.3,果然是两者版本不一致造成的错误,我们知道 php 内部有集成的 php-fpm ,而这个内部集成的 php-fpm 和 php的版本是一致的,也就是 5.6.6,所以这里我们要更换成为php 内部集成的 php-fpm 就可以了,让 php 和 php-fpm 一致就OK了,使用 php 内部集成 php-fpm,然后重新启动 php-fpm,成功,如下:
- root 18442 1 0 17:36 ? 00:00:01 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
- nobody 30640 18442 0 18:04 ? 00:00:02 php-fpm: pool www
- nobody 31156 18442 0 18:05 ? 00:00:02 php-fpm: pool www
- nobody 32424 18442 0 18:08 ? 00:00:02 php-fpm: pool www
这里要注意一点的是,redis.so如果还是无法加载的话,我们可以查询一下 php.ini 中的 extension_dir和extension 的配置,如下:
- extension_dir = "/usr/lib64/php/modules/"
- extension=redis.so
phpredis 编译出来的 redis.so 我们同样需要拷贝到 /usr/lib64/php/modules/ 的目录下面,另外 /etc/php.d/ 也需要做一个软链接,链接到 redis.so,而且还要创建一个 redis.ini 的文件,如果觉得麻烦的话,可以重新安装 php redis 即可,安装的代码如下:
- pecl install redis
来回访了,欢迎多多走动!