Amazon web services 未加载redis.so模块

Amazon web services 未加载redis.so模块,amazon-web-services,amazon-ec2,redis,phpredis,Amazon Web Services,Amazon Ec2,Redis,Phpredis,我在Amazon Web Services上有一个EC2实例,在同一VPC中还有一个ElastiCache(Redis)实例。 我的EC2实例已经安装了Amazon Linux AMI 2015.09。我还将其配置为与mpm_worker_模块一起工作,而不是预工作。配置工作正常,我可以从浏览器访问页面 然后,我安装了redis客户端,redis cli命令在ssh上运行良好 然后我安装了phpredis(-O phpredis.zip),并创建了一个简单的PHP脚本来检查它是否正常工作(一个简

我在Amazon Web Services上有一个EC2实例,在同一VPC中还有一个ElastiCache(Redis)实例。 我的EC2实例已经安装了Amazon Linux AMI 2015.09。我还将其配置为与mpm_worker_模块一起工作,而不是预工作。配置工作正常,我可以从浏览器访问页面

然后,我安装了redis客户端,redis cli命令在ssh上运行良好

然后我安装了phpredis(-O phpredis.zip),并创建了一个简单的PHP脚本来检查它是否正常工作(一个简单的index.PHP)

如果我从ssh控制台(即php index.php)启动这个脚本,它会工作得很好。如果启动相同的脚本试图从浏览器打开页面,则会出现以下错误:
致命错误:未找到类“Redis”

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>
我还注意到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的“include”,它就可以正常工作。但我想安装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模块,它工作得很好。如果我使用worker,则会出现上述错误。

解决方案执行以下步骤来安装phpredis:

  • 下载并解压缩phpredis
  • 命令
    zts phpize
  • 命令
    /configure--with-php-config=/usr/bin/zts-php-config
  • 命令
    make&&make-install
我在做
phpize
而不是
zts phpize
,我没有添加
——使用php config
选项:这就是问题所在

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

extension=redis.so
重新启动apache,它应该可以工作

希望这能帮助别人

另外,如果您希望它在命令行(即“php script.php”)上工作,您还必须使用
phpize
和simple
/configure
命令安装它

extension=redis.so