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 モジュールを使用すると、うまく機能します。ワーカーを使用すると、上記のエラーが発生しました。