【发布时间】:2016-02-01 22:13:30
【问题描述】:
我在 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 我已经添加了文件“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
相反,如果我使用带有 autoload.php 的“include”的 Predis,它可以正常工作。但是我想安装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 模块,效果很好。如果我使用worker,就会出现上述错误。
【问题讨论】:
标签: amazon-web-services amazon-ec2 redis phpredis