1

Amazon Web Services に EC2 インスタンスがあり、同じ VPC に ElastiCache (Redis) のインスタンスもあります。私の EC2 インスタンスには、Amazon Linux AMI 2015.09 がインストールされています。また、プリフォークではなく、mpm_worker_module で動作するように構成しました。設定は正しく機能しており、ブラウザからページにアクセスできます。

その後、redis クライアントをインストールしました。redis-cli コマンドは ssh から完全に機能しています。

次に、phpredis ( https://github.com/nicolasff/phpredis/zipball/master -O phpredis.zip) をインストールし、適切に動作しているかどうかを確認するための単純な PHP スクリプト (単純な index.php) を作成しました。

このスクリプトを ssh コンソール (つまり、php index.php) から起動すると、うまく機能します。ブラウザからページを開こうとして同じスクリプトを起動すると、次のエラーが発生します。 Fatal error: Class 'Redis' not found

Apache内の私のphp.confファイルは次のとおりです。

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

フォルダー /etc/php-zts-5.6.d に、ファイル「redis.ini」を追加しました

extension = redis.so

また、redis インストールが redis.so をこのフォルダーにのみ追加することにも気付きました

 /usr/lib64/php/5.6/modules/

フォルダーではなく、/usr/lib64/php-zts/5.6/modules/あるフォルダーから別のフォルダーにコピーしました。しかし、同じエラーでまだ機能していません:

Fatal error: Class 'Redis' not found

代わりに、autoload.php の「include」を使用して Predis を使用すると、正常に動作します。しかし、私は phpredis をインストールしたいと思っています。なぜなら、私たちのシステムは Redis サーバーに対して毎秒数千回の呼び出しを行い、phpredis はコンパイルされているため、はるかに高速になるからです。

私は何を間違っていますか?

編集 私のredisエラーログで、このメッセージが表示されます

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

さらに、prefork モジュールを使用すると、うまく機能します。ワーカーを使用すると、上記のエラーが発生しました。

4

1 に答える 1

3

解決策は、次の手順を実行して phpredis をインストールすることでした。

  • Phpredisをダウンロードして解凍する
  • 指図zts-phpize
  • 指図./configure --with-php-config=/usr/bin/zts-php-config
  • 指図make && make install

私はやっていましたが、オプションを追加していませんでしたphpize:これが問題でしたzts-phpize--with-php-config

もちろん、ファイル内に redis.ini を /etc/php-zts-5.6.d/ フォルダーに追加する必要があります。

extension=redis.so

Apacheを再起動すると、動作するはずです

それが誰かを助けることを願っています

PS コマンド ライン (つまり、"php script.php") から動作させたい場合はphpize、簡単な./configureコマンドを使用してインストールする必要があります。

于 2015-11-04T03:47:58.903 に答える