redis.so module is not loaded

青春壹個敷衍的年華 提交于 2019-12-13 20:11:01

问题


I have an EC2 instance on Amazon Web Services and, in the same VPC there's also an instance of ElastiCache (Redis). My EC2 instance have installed Amazon Linux AMI 2015.09. I have also configured it to work with mpm_worker_module and not prefork. The configuration is correctly working and I can access pages from my browser.

I have then installed redis client, and the redis-cli command is perfectly working from ssh.

I have then installed phpredis (https://github.com/nicolasff/phpredis/zipball/master -O phpredis.zip) and I have created a simple PHP script to check if it's working properly (a simple index.php).

If I launch this script from ssh console (i.e. php index.php) it works great. If I launch the same script trying to open the page from my browser I get this error: Fatal error: Class 'Redis' not found

My php.conf file inside apache is the following:

<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>

In folder /etc/php-zts-5.6.d I have added the file "redis.ini" with inside

extension = redis.so

I have also noticed that redis installation adds redis.so only to this folder

 /usr/lib64/php/5.6/modules/

And not to /usr/lib64/php-zts/5.6/modules/ folder, so I copied it from one folder to the other. But it's still not working, with same error:

Fatal error: Class 'Redis' not found

Instead, if I use Predis, with "include" of autoload.php, it works fine. But I'd like to have installed phpredis, cause our system will make thousands of calls each second to Redis Server, and phpredis will be much faster since it's compiled.

What am I doing wrong?

Edit In my redis error log I get this message

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

Plus, if I use the prefork module, it works great. If I use the worker, I got the above error.


回答1:


The solution was doing the following steps to install phpredis:

  • download and unzip phpredis
  • command zts-phpize
  • command ./configure --with-php-config=/usr/bin/zts-php-config
  • command make && make install

I was doing phpize and not zts-phpize and I was not adding the --with-php-config option: this was the problem

Of course then you have to add redis.ini into /etc/php-zts-5.6.d/ folder with, inside the file:

extension=redis.so

Restart apache and it should work

Hope that will help someone

P.S. If you want it to work from command line (i.e. "php script.php"), you have to install it also with phpize and simple ./configure command.



来源:https://stackoverflow.com/questions/33470667/redis-so-module-is-not-loaded

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!