其实对于 Linux 系统和 LNMP 环境并不是很熟,如果有错误请指正。
一、关于 PHP
PHP 的编译参考了此文:http://blog.aboutc.net/linux/65/compile-and-install-php-on-linux
编译完成后通过 phpinfo() 查看发现没有加载到 php.ini 文件(Loaded Configuration File 配置项为 None),需要手动设置,否则后面无法加载 redis 扩展。
设置方法为
php-fpm -c /usr/local/php-5.6.21/etc/
(参考:http://blog.csdn.net/haitun312366/article/details/38639129)
二、安装 phpredis
1. 从 git 下载压缩包然后解压到 /usr/local/phpredis
2. 按照官方的说明进行编译
cd /usr/local/phpredis
phpize
./configure [--enable-redis-igbinary]
make && make install
结束以后,会自动把 redis.so 放到 PHP 的 extension_dir。
3. 配置 PHP,编辑 php.ini,增加:
extension=redis.so
保存后,重启 php-fpm:
service php-fpm restart
结束后,通过 phpinfo() 查看是否加载了 redis 扩展。
三、遇到的问题
如果重启 php-fpm 的时候提示:
ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (98)
可以先结束进程再启动:
killall php-fpm
service php-fpm start
最头疼的问题到了,无法正常加载 redis 扩展:
PHP Warning: PHP Startup: redis: Unable to initialize module
Module compiled with module API=********
PHP compiled with module API=********
Google 了很多都说是执行编译源码包执行 phpize 的版本与当前 php 环境中 phpize 的版本不一致造成的,事实上也的确是这个原因,因为系统之前安装过其他版本的 PHP。
解决的最直接的方法是,配置 phpredis 的时候指定 phpize 和 php-config 的绝对路径:https://segmentfault.com/a/1190000003830937
将上面第二步的部分修改为:
cd /usr/local/phpredis
/usr/local/php-5.6.21/bin/phpize
./configure --with-php-config=/usr/local/bin/php-config
make && make install
重启 php-fpm,查看 phpinfo(),done!