解決PHP Redis擴展無法加載的問題


最近在工作中需要使用PHP訪問Redis,從https://github.com/phpredis/phpredis下載了phpredis,並且按照官方的說明進行了安裝

phpize
./configure [--enable-redis-igbinary]
make && make install

 

但是在重啟php-fpm的過程中,發生了如下的錯誤,redis.so無法載入

[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)
[29-Jun-2015 11:14:43] NOTICE: PHP message: PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/redis.so' - /usr/lib64/php/modules/redis.so: undefined symbol: zend_new_interned_string in Unknown on line 0
<br />
<b>Warning</b>:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/redis.so' - /usr/lib64/php/modules/redis.so: undefined symbol: zend_new_interned_string in <b>Unknown</b> on line <b>0</b><br />
<br />

 

試了網上一些解決方案,均無法解決問題。

實在沒別的辦法,於是打算重裝php-fpm試試,遂去http://php-fpm.org/download/想下載個新版本的php-fpm,結果發現版本大於5.3.3的PHP內部已經集成了php-fpm,不用再另行安裝了。

於是用php --version查詢了一下PHP的版本,已經是5.6.6了,

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-fpm,和PHP並不是配套的

查看這個php-fpm的版本,發現是5.3.3

$/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內部集成的php-fpm版本是5.6.6

$ /usr/local/php/sbin/php-fpm -v
PHP 5.6.6 (fpm-fcgi) (built: Mar  9 2015 13:27:55)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

用PHP內部集成的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

 

所以粗心害死人啊,以后在安裝程序的時候需要多加小心,盡量顯式的標明軟件的版本,這樣就會少犯這樣的錯誤,少走彎路了。

 

另外需要注意:

  • 在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文件,內容如下:
$ cat /etc/php.d/redis.ini 
; Enable redis extension module
extension=redis.so
  • 安裝phpredis還可以通過命令
pecl install redis

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM