1

我在 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 的“包含”的 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 模块,效果很好。如果我使用工人,我得到了上述错误。

4

1 回答 1

3

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

  • 下载并解压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,它应该可以工作

希望对某人有所帮助

PS如果你想让它从命令行工作(即“php script.php”),你还必须使用phpize简单的./configure命令来安装它。

于 2015-11-04T03:47:58.903 回答