2015-11-02 2 views
0

J'ai une instance EC2 sur Amazon Web Services et, dans le même VPC, il y a aussi une instance d'ElastiCache (Redis). Mon instance EC2 a installé Amazon Linux AMI 2015.09. Je l'ai également configuré pour fonctionner avec mpm_worker_module et non prefork. La configuration fonctionne correctement et je peux accéder aux pages de mon navigateur.Le module redis.so n'est pas chargé

J'ai ensuite installé redis client, et la commande redis-cli fonctionne parfaitement depuis ssh. J'ai ensuite installé phpredis (https://github.com/nicolasff/phpredis/zipball/master -O phpredis.zip) et j'ai créé un simple script PHP pour vérifier s'il fonctionne correctement (un simple index.php).

Si je lance ce script à partir de la console ssh (c'est-à-dire, index php.php), cela fonctionne très bien. Si je lance le même script essayant d'ouvrir la page de mon navigateur je reçois cette erreur: Fatal error: Class 'Redis' not found

Mon fichier php.conf à l'intérieur apache est le suivant:

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

Dans le dossier/etc/PHP- ZTS-5.6.d J'ai ajouté le fichier "redis.ini" avec à l'intérieur

extension = redis.so 

J'ai aussi remarqué que l'installation de Redis ajoute redis.so que dans ce dossier

/usr/lib64/php/5.6/modules/ 

Et pas au dossier /usr/lib64/php-zts/5.6/modules/, donc je l'ai copié d'un dossier à l'autre. Mais il ne fonctionne toujours pas, avec la même erreur:

Fatal error: Class 'Redis' not found 

Au lieu de cela, si j'utilise Predis, avec « include » de autoload.php, il fonctionne très bien. Mais je voudrais avoir installé phpredis, car notre système va faire des milliers d'appels chaque seconde à Redis Server, et phpredis sera beaucoup plus rapide depuis sa compilation.

Qu'est-ce que je fais mal?

Modifier Dans mon erreur Redis journal je reçois ce 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 

De plus, si j'utilise le module prefork, il fonctionne très bien. Si j'utilise le travailleur, j'ai l'erreur ci-dessus.

Répondre

1

La solution a été fait les étapes suivantes pour installer phpredis:

  • télécharger et décompressez phpredis
  • commande zts-phpize
  • commande ./configure --with-php-config=/usr/bin/zts-php-config
  • commande
  • make && make install

je faisais phpize et non zts-phpize et je n'ajoutais pas l'option --with-php-config: c'était le problème

Bien sûr, vous devez ajouter redis.ini dans /etc/php-zts-5.6.d/dossier avec, à l'intérieur du fichier:

extension=redis.so 

Redémarrez apache et il devrait fonctionner

espoir qui va aider quelqu'un

post-scriptum Si vous voulez que cela fonctionne à partir de la ligne de commande (c'est-à-dire "php script.php"), vous devez également l'installer avec phpize et une commande simple ./configure.