他の誰かが作ったサイトを立ち上げるように頼まれました。これはWordpressショップサイトで、Memcachedを実行する必要があります。ローカルサーバーでMemcachedとmemcachephpプラグインを動作させるのに問題があります。memcachedとmemcacheをインストールする前にPHPプラグイン、このエラーが発生します:
Fatal error: Class 'Memcache' not found in [Path]wp-content/object-cache.php on line 350
Memcachedとmemcache PHPプラグインを(Homebrew経由で)インストールしたので、「データを受信していません」ページが表示され、Apacheエラーログに次のエラーが記録されます。
dyld: lazy symbol binding failed: Symbol not found: _mmc_queue_pop
Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
Expected in: flat namespace
dyld: Symbol not found: _mmc_queue_pop
Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
Expected in: flat namespace
[Sat May 05 16:38:27 2012] [notice] child pid 26491 exit signal Trace/BPT trap (5)
アクティビティモニターでそのpidを探しても無駄になりましたが、ページを読み込もうとするたびに変化します。また、_mmc_queue_popについてはどこにも見つかりません。
Mac OSX Lion、PHP ver 5.3.8、Memcached ver 1.4.13、およびMemcache PHPプラグインver3.0.6)を実行しています。
誰かが私がこれを修正する方法を知っていますか?
ありがとう!
Davidがコメントで述べたように、memcached自体ではなく、memcacheプラグインをビルドするときは、次のようにrun configure
を追加する必要があります。
MACOSX_DEPLOYMENT_TARGET=10.7 CFLAGS='-fgnu89-inline' LDFLAGS='-fgnu89-inline' CXXFLAGS='-fgnu89-inline' ./configure
それは私にとって完璧に機能しました。
Memcache.soが実際にリンクされていることを確認するための最初のステップとして提案します。 Linuxではldd
を使用し、OSXではotool -L
ちゃんと覚えたら。これは、プラグインがシステム上の複数のmemcacheライブラリの間違ったライブラリ、または互換性のないバージョンのいずれかを取得しているように見えます。
補遺-El Capitan、php56、php56-memcache 3.0.8
David SchwartzとCourtDemoneの回答を読んだ後、自作の数式を編集する方法について SOに関するこの回答 を読むまで、私はまだそれを理解できませんでした。
brew edit php56-memcache
を実行し、次の行に貼り付けることで、数式に以下を追加しました。
. 20 safe_phpize
. 21
+ 22 ENV['MACOSX_DEPLOYMENT_TARGET'] = '10.11'
+ 23 ENV['CFLAGS'] = '-fgnu89-inline'
+ 24 ENV['LDFLAGS'] = '-fgnu89-inline'
+ 25 ENV['CXXFLAGS'] = '-fgnu89-inline'
+ 26
. 27 system "./configure", "--prefix=#{prefix}",
. 28 phpconfig
. 29 system "make"