web-dev-qa-db-ja.com

致命的なエラー:クラス 'Redis'が見つかりません

Redisをubuntu 14サーバーにphpredis拡張機能でインストールしました。私はNginxサーバーを使用しています。私はphpテストスクリプトを持っています

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

これは、コマンドラインからは正常に機能しますが、Webブラウザーからは機能しません。

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

phpinfo()でも見えない

すべてapt-get installでインストールされます

他のすべてのモジュール(mysql、imagemagick ...)は正常に動作しています

私はグーグルで数時間過ごしたが、何も役に立たなかった

12
Thomas

Redisはインストールしましたが、php-redisはインストールしていません。以下のコマンドを実行して、php-redisをインストールできます。

Sudo apt-get install php-redis
10
Kareem

Php Redisを手動でインストールすると、この問題は解決しました

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

RicoのTech Memo からコピー

9
Thomas

TLDR;
Ubuntu 16.04でPHP 7を使用してNGINXを使用している場合、PHP-FPMが再起動されないことがわかりました。サービスを再起動するだけでうまくいきました:

_Sudo service php-fpm restart_
または
_Sudo service php7.0-fpm restart_
または
_Sudo service php5-fpm restart_

上記のコマンドのいずれかが機能しない場合は、「restart PHP-FPM」を検索する必要があるかもしれません。

いくつかのコンテキストを提供するために、標準の_Sudo apt-get install php-redis_を使用してphpredisをインストールし、_Sudo systemctl restart nginx_を使用してnginxを再起動しましたが、new Redis() in PHP質問と同じエラーが表示されました(...クラス 'Redis'が見つかりません...)。

NGINXサーバー上のPHPファイルでphpinfo();を実行すると、PHP-FPMが_/etc/php/7.0/fpm/conf.d_( " このdirをスキャンして、追加の.iniファイルを探します "セクション)。単純な_ls -al /etc/php/7.0/fpm/conf.d_でそのディレクトリを確認すると、次の名前のシンボリックリンクがあることがわかります_20-redis.ini_が、そのファイルがphpinfoセクションに読み込まれていません "追加の.iniファイルが解析されました"。

今見ている問題は、NGINXを再起動してもPHP-FPMが再起動しなかったことです。 _ps aux | grep php-fpm_を使用して、NGINXを停止したときにPHP-FPMプロセスが実行されていたかどうかを確認したところ、疑いが確認されました。 PHPモジュールをリロードするには再起動が必要なので、PHP-FPMの再起動が必要でしたさらにからNGINXを再起動します。

4
pwyg