Назад | Перейти на главную страницу

Проблемы с memcache.so

Меня попросили запустить сайт, созданный кем-то другим. Это сайт магазина Wordpress, для работы которого требуется Memcached, и у меня возникли проблемы с тем, чтобы Memcached и плагин memcache php работали на моем локальном сервере. Перед установкой 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 в Activity Monitor, и он меняется каждый раз, когда я пытаюсь загрузить страницу. Кроме того, я нигде не могу найти ничего о _mmc_queue_pop.

Я использую Mac OSX Lion, PHP версии 5.3.8, Memcached версии 1.4.13 и плагин Memcache PHP версии 3.0.6.

Кто-нибудь знает, как это исправить?

Спасибо!

Как Дэвид упомянул в комментариях, при создании плагина memcache, а НЕ самого memcached, вы должны добавить запуск configure как это:

MACOSX_DEPLOYMENT_TARGET=10.7 CFLAGS='-fgnu89-inline' LDFLAGS='-fgnu89-inline' CXXFLAGS='-fgnu89-inline' ./configure

Это отлично сработало для меня.

Приложение - El Capitan, php56, php56-memcache 3.0.8

Прочитав ответы Дэвида Шварца и Корт-Демона, я все еще не понял их, пока не прочитал этот ответ на 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"

Я бы предложил в качестве первого шага убедиться, с чем действительно связан memcache.so. В linux вы бы использовали ldd, в OSX это должно быть otool -L IIRC. Похоже, что плагин получает либо неправильную из нескольких библиотек memcache в системе, либо несовместимую версию.