我在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的模块,它的伟大工程。如果我使用工人,我得到了上述错误。