redis.so模块未加载

时间:2015-11-02 04:15:14

标签: amazon-web-services amazon-ec2 redis phpredis

我在Amazon Web Services上有一个EC2实例,在同一个VPC中,还有一个ElastiCache(Redis)的实例。 我的EC2实例安装了Amazon Linux AMI 2015.09。我还将它配置为使用mpm_worker_module而不是prefork。配置正常工作,我可以从浏览器访问页面。

然后我安装了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

我在apache中的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中我添加了文件&#34; redis.ini&#34;在里面

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,使用&#34; include&#34; autoload.php,它工作正常。但是我想安装phpredis,因为我们的系统每秒都会向Redis Server发出数千次调用,而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 个答案:

答案 0 :(得分:3)

解决方案是按照以下步骤安装phpredis:

  • 下载并解压缩phpredis
  • command zts-phpize
  • command ./configure --with-php-config=/usr/bin/zts-php-config
  • command make && make install

我在做phpize而不是zts-phpize而我没有添加--with-php-config选项:这就是问题

当然,你必须在文件中将redis.ini添加到/etc/php-zts-5.6.d/文件夹中:

extension=redis.so

重启apache,它应该可以正常工作

希望能帮到某人

P.S。如果您希望它从命令行工作(即&#34; php script.php&#34;),您还必须使用phpize和简单./configure命令安装它。