web-dev-qa-db-fra.com

Erreur fatale: la classe 'Redis' non trouvée

J'ai installé Redis sur mon serveur Ubuntu 14 avec l'extension phpredis. J'utilise un serveur Nginx. J'ai un script de test php

$redis=new Redis() or die("Cannot load Redis module.");
$redis->connect('localhost');
$redis->set('random', Rand(5000,6000));
echo $redis->get('random');

qui fonctionne très bien à partir de la ligne de commande mais pas du navigateur Web.

Journal des erreurs Nginx:

[info] 31102#0: Using 32768KiB of shared memory for Push module in /etc/nginx/nginx.conf:82
[error] 31108#0: *21 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Class 'Redis' not found in...

je ne le vois même pas dans phpinfo()

tous installés avec apt-get install

tous les autres modules (mysql, imagemagick ...) fonctionnent bien

j'ai passé quelques heures sur google mais je n'ai rien trouvé d'utile

9
Thomas

L'installation manuelle de Php Redis a résolu ce problème

git clone git://github.com/nicolasff/phpredis.git
cd phpredis
phpize
./configure
make
Sudo -s make install

Sudo -s
echo "extension=redis.so">/etc/php5/conf.d/redis.ini
ln -s /etc/php5/conf.d/redis.ini /etc/php5/fpm/conf.d/20-redis.ini
exit

copié de Rico's Tech Memo

6
Thomas

Vous avez installé redis mais pas php-redis. vous pouvez simplement lancer la commande ci-dessous pour installer php-redis

Sudo apt-get install php-redis
2
Kareem

TLDR;
Sur Ubuntu 16.04 utilisant NGINX avec PHP 7, j’ai constaté que PHP-FPM n’avait pas été redémarré. Un simple redémarrage du service a fonctionné pour moi:

Sudo service php-fpm restart
OU
Sudo service php7.0-fpm restart
OU
Sudo service php5-fpm restart

Vous aurez peut-être besoin de chercher "redémarrer PHP-FPM" au cas où l'une des commandes ci-dessus ne fonctionnerait pas.

Pour donner un peu de contexte, j’avais installé phpredis en utilisant le Sudo apt-get install php-redis standard et j’ai redémarré nginx en utilisant Sudo systemctl restart nginx mais chaque fois que j’essayais d’utiliser new Redis() dans PHP, la même erreur que dans la question (.. . Classe 'Redis' non trouvée ...).

Lors de l'exécution de phpinfo(); dans un fichier PHP sur le serveur NGINX, je pouvais voir que PHP-FPM chargeait une configuration supplémentaire à partir de /etc/php/7.0/fpm/conf.d (" Recherchez dans ce répertoire d'autres fichiers .ini "). En regardant dans ce répertoire avec un simple ls -al /etc/php/7.0/fpm/conf.d, je peux voir qu'il existe un lien symbolique nommé 20-redis.ini mais ce fichier n'a pas été chargé dans la section phpinfo " Fichiers .ini supplémentaires analysés ".

Le problème que je vois maintenant est que le redémarrage de NGINX n'a ​​pas redémarré PHP-FPM. Utiliser ps aux | grep php-fpm pour voir si des processus PHP-FPM étaient en cours d’exécution lorsque j’avais arrêté NGINX a confirmé mes soupçons. Comme un redémarrage est nécessaire pour recharger les modules PHP, le redémarrage de PHP-FPM était requis en outre au redémarrage de NGINX.

0
pwyg