web-dev-qa-db-ger.com

Schwerwiegender Fehler: Klasse 'Redis' wurde nicht gefunden

Ich habe Redis auf meinem Ubuntu 14-Server mit der Erweiterung phpredis installiert. Ich verwende einen Nginx-Server. Ich habe PHP-Test-Skript

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

das funktioniert gut von der Befehlszeile aus, aber nicht vom Webbrowser.

Nginx-Fehlerprotokoll:

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

ich kann es nicht mal in phpinfo() sehen

alle mit apt-get install installiert

alle anderen Module (mysql, imagemagick ...) funktionieren einwandfrei

ich habe einige Stunden mit Google verbracht, aber nichts Nützliches gefunden

9
Thomas

Die manuelle Installation von Php Redis hat dieses Problem gelöst

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

kopiert aus Rico's Tech Memo

6
Thomas

Sie haben Redis installiert, aber keine PHP-Redis. Sie können einfach den folgenden Befehl ausführen, um php-redis zu installieren

Sudo apt-get install php-redis
2
Kareem

TLDR;
Auf Ubuntu 16.04 mit NGINX mit PHP 7 habe ich festgestellt, dass PHP-FPM nicht neu gestartet wurde. Ein einfacher Neustart des Dienstes funktionierte für mich:

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

Möglicherweise müssen Sie nach "PHP-FPM neu starten" suchen, wenn einer der obigen Befehle nicht funktioniert.

Um etwas Kontext zu geben, hatte ich phpredis mit dem Standard Sudo apt-get install php-redis installiert und nginx mit Sudo systemctl restart nginx neu gestartet. Bei jedem Versuch, new Redis() in PHP zu verwenden, erhielt ich den gleichen Fehler wie in der Frage (.. Klasse 'Redis' nicht gefunden ...).

Bei der Ausführung von phpinfo(); in einer PHP -Datei auf dem NGINX-Server konnte ich sehen, dass PHP-FPM zusätzliche Konfiguration von /etc/php/7.0/fpm/conf.d (" Scanne dieses Verzeichnis nach zusätzlichen .ini-Dateien " - Abschnitt) lädt. Wenn Sie in diesem Verzeichnis mit einem einfachen ls -al /etc/php/7.0/fpm/conf.d suchen, kann ich feststellen, dass es einen symbolischen Link mit dem Namen 20-redis.ini gibt. Diese Datei wurde jedoch nicht im phpinfo-Abschnitt geladen. " Zusätzliche .ini-Dateien analysiert ".

Das Problem, das ich jetzt sehe, ist, dass der Neustart von NGINX PHP-FPM nicht neu gestartet hat. Wenn Sie ps aux | grep php-fpm verwenden, um zu überprüfen, ob PHP-FPM-Prozesse ausgeführt wurden, als ich gestoppt hatte, bestätigte NGINX meinen Verdacht. Da zum Neustart der PHP-Module ein Neustart erforderlich ist, war der PHP-FPM-Neustart zusätzlich zum Neustart von NGINX erforderlich.

0
pwyg