web-dev-qa-db-ja.com

スレッドセーフなphp-pecl-memcacheおよびphp-pecl-mongo

Apacheを実行しているFedoraサーバーをpreforkからworkerに切り替えたいと思っています。

MongoとMemcacheのphpライブラリを除いて、すべて問題ないようです。誰かがこれらをhttpdワーカーmpmで動作させることに成功しましたか?

Memcacheとmongoを次のようにインストールしたことに注意してください。

yum install php-pecl-memcache php-pecl-mongo

気まぐれで、.soを/usr/lib64/php/modules/から/usr/lib64/php-zts/modules/にコピーしようとしましたが、次のエラーが発生しました。

PHP警告:PHP起動:動的ライブラリを読み込めません '/usr/lib64/php-zts/modules/memcache.so'-/usr/lib64/php-zts/modules/memcache。 so:未定義のシンボル:0行目の不明のbasic_globals PHP警告:PHP起動:動的ライブラリを読み込めません '/ usr/lib64/php-zts/modules/mongo.so '-/ usr/lib64/php-zts/modules/mongo.so:未定義のシンボル:0行目の不明のcore_globals

1
dtbarne

モジュールを/usr/lib64/php/modules/から/usr/lib64/php-zts/modules/にコピーすることはできません— ZTS(スレッド化)と非ZTSビルドのPHPは異なるモジュールABIを持っています。

どうやら Fedora 18のphp-pecl-memcacheパッケージ そして Rawhideパッケージ でさえZTSサポートなしで構築されているので、スレッド化されたApacheMPMのmod_phpでは使用できません。

ここにはいくつかのオプションがあります。

  1. PHP FAQ の推奨事項)PHPをスレッド化されたApacheMPMと一緒に使用する最も信頼できる方法はFastCGIですモード(たとえば、php-fpmを使用)。これにより、PHPは個別のシングルスレッドプロセスで実行されます。このようにして、使用可能なすべてのPHP拡張機能を使用できます—スレッドセーフでないライブラリを使用し、マルチスレッドプロセスでまったく機能しないものでさえ。

  2. スレッド化されたMPMでmod_phpを本当に使用する必要がある場合は、php-ztsサポートで構築されたサードパーティパッケージ( このように )を使用できます(/usr/lib64/php-zts/modules/memcache.soがに存在することに注意してくださいファイルリスト)。

  3. 必要なPHP拡張機能)をサポートするphp-ztsを備えた既製のバイナリパッケージが見つからない場合は、パッケージを自分で再構築してみてください。問題のコードでは、ZTSがサポートされていません。

2
Sergey Vlasov