我在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模块,它的效果很好。如果我使用工人,我得到了上述错误。
答案 0 :(得分:3)
解决方案是按照以下步骤安装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,它应该可以正常工作
希望能帮到某人
P.S。如果您希望它从命令行工作(即&#34; php script.php&#34;),您还必须使用phpize
和简单./configure
命令安装它。