2015-11-02 117 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命令来安装它。