2015-11-02 64 views
0

我在Amazon Web Services上有一個EC2實例,並且在同一個VPC中還有一個ElastiCache(Redis)實例。 我的EC2實例安裝了Amazon Linux AMI 2015.09。我還將它配置爲使用mpm_worker_module,而不是prefork。配置正常工作,我可以從我的瀏覽器訪問頁面。redis.so模塊未加載

我已經安裝了redis客戶端,redis-cli命令完全可以在ssh中使用。

然後我安裝了phpredis(https://github.com/nicolasff/phpredis/zipball/master -O phpredis.zip),我創建了一個簡單的PHP腳本來檢查它是否正常工作(簡單的index.php)。

如果我從ssh控制檯(即php index.php)啓動這個腳本,它很好用。如果我啓動相同的腳本試圖從我的瀏覽器打開網頁我得到這個錯誤: Fatal error: Class 'Redis' not found

內阿帕奇我php.conf文件如下:

<IfModule prefork.c> 
    LoadModule php5_module modules/libphp-5.6.so 
</IfModule> 
<IfModule !prefork.c> 
    LoadModule php5_module modules/libphp-zts-5.6.so 
</IfModule> 

在文件夾中的/ etc/PHP的ZTS-5.6.d我已經加入了文件「redis.ini」裏面

extension = redis.so 

我也注意到,Redis的安裝添加redis.so僅此文件夾

/usr/lib64/php/5.6/modules/ 

而不是/usr/lib64/php-zts/5.6/modules/文件夾,所以我將它從一個文件夾複製到另一個文件夾。但它仍然沒有工作,用同樣的錯誤:

Fatal error: Class 'Redis' not found 

相反,如果我用Predis,以「包括」 autoload.php的,它工作正常。但是我想安裝phpredis,因爲我們的系統每秒會向Redis服務器發出數千次呼叫,並且編譯後,phpredis將會更快。

我在做什麼錯?

編輯 在我Redis的錯誤日誌中我得到這個消息

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/5.6/modules/redis.so' - /usr/lib64/php/5.6/modules/redis.so: undefined symbol: compiler_globals in Unknown on line 0 

另外,如果我用的是prefork的模塊,它的偉大工程。如果我使用工人,我得到了上述錯誤。

回答

1

溶液執行以下步驟來安裝phpredis:

  • 下載並解壓phpredis
  • 命令zts-phpize
  • 命令./configure --with-php-config=/usr/bin/zts-php-config
  • 命令make && make install

我在做phpize而不是zts-phpize,我沒有添加--with-php-config選項:這是問題

當然,您必須將redis.ini添加到/etc/php-zts-5.6。d與/文件夾,裏面的文件:

extension=redis.so 

重新啓動Apache,它應該工作

希望這將幫助別人

附:如果你想讓它通過命令行工作(即「php script.php」),你還必須使用phpize和簡單的./configure命令來安裝它。