Memcached + PHP под Windows

Имеются две основные проблемы, которые заставили меня написать эту заметку. Обе они упираются в крайне малую распространенность актуальных и рабочих версий вполне экзотических библиотек, собранных под ОС Windows.

  • Днем с огнем не найти php_memcache.dll
  • Даже если мы нашли php_memcache.dll, нам осталось немало сил приложить к поиску работающего с ним Memcached.

Библиотеку php_memcache.dll я нашел в pecl версии 5.2.6-Win32. И, судя по всему, это последняя существующая версия pecl для Windows, во всяком случае, более поздних я не видел. Конечно, все это не проблема, если есть желание/время/возможность собрать библиотеку из исходников, но не об этом речь.

Библиотекой для PHP мы обзавелись (ссылки на скачивание в конце статьи), осталось скачать сам демон. На момент написания статьи (31.05.09), из стабильных версий для скачивания доступна 1.2.8. Но данная версия конфликтует с имеющимся php_memcache.dll. На винчестере была более ранняя версия демона, а именно 1.2.1. Версия, конечно, старовата и, если почитать change-log, многого лишена, но для отладки должно хватить. Опять же, если не хватит, то вперед и с песней идем компилировать библиотеку для PHP.




Установка

Процесс установки прост и отнимает не более нескольких минут времени

  1. Распаковываем Memcached в любую удобную вам папку
  2. С помощью командной строки (Пуск > Выполнить > cmd) запускаем установку Memcached
    memcached.exe -d install
  3. Заходим в Панель управления > Администрирование > Службы (в Windows Vista нечто аналогичное), ищем memcached Server и запускаем его. Также можно поставить тип запуска «Авто», дабы сервер автоматически стартовал при загрузке системы.
  4. В директории, где у нас лежит PHP, в папку ext кладем php_memcache.dll
  5. В файле php.ini, в секцию, где подключаются расширения добавляем строку
    extension = php_memcache.dll

Теперь остается создать скрипт с функцией phpinfo(). Запускаем этот скрипт и ищем на странице секцию Memcache. Если секция найдена, то memcache установлен и готов к работе.

При подключении к серверу memcache из скрипта, как правило, указывают localhost, во всяком случае, в данном примере это будет именно так, потому, что демон мы установили на локальную машину. Но, я настоятельно рекомендую указывать ip-адрес в качестве хоста – 127.0.0.1. Дело в том, что в Windows Vista по-умолчанию включена поддержка протокола Ipv6, но, как известно, далеко не все умеют с ним работать, и memcache именно тот случай. Если указать localhost, memcache пожалуется на то, что не может отрезольвить ip для указанного хоста.

Когда сам столкнулся с этой проблемой, долго ломал голову над тем, в чем же может быть дело, пока не сделал ping localhost

Файлы Memcached и DLL

Memcached 1.2.1 win32
php_memcache.dll

Из комментариев старого блога:

  • Можно попробовать использовать сервер версии 1.2.6. Говорят, работает с той же версией DLL, что была использована мной.
  • Читатель с именем [d]bykadorov поделился ссылкой на более новые версии dll, совместимые с последними версиями сервера Mc. По его словам, они позволили ему собрать связку Memcached + PHP 5.3
  • Если при установке появляется ошибка MSVCP71.dll is missing, то можно прочесть статью Fix Msvcp71.dll And Msvcr71.dll Missing Error In Windows 7, где описывается способ борьбы с ней.

Комментарии (11)

  1. Большое спасибо! Полгода назад потратил целый день, чтобы найти файлы и настроить мемкэш. Сейчас снова понадобилось поднять на другой машине, по Вашей инструкции сделал это за 5 минут.

  2. Петр

    Если расширение не устанавливается под Windows, попробуйте LiteMemcache — самый легковесный клиент для Memcached, написанный на PHP. Реализована вся необходимая функциональность (включая CAS-операции). Покрыт юнит-тестами.

    https://github.com/ptrofimov/litememcache

  3. под win7 для установки memcached командную строку нужно запустить от имени администратора

  4. Александр

    А зачем устанавливать memcached в качестве службы, разве не достаточно php_memcached.dll
    К стати статью нужно обновить, и на последние версии php можно найти php_memcached.dll, или статья как и многие в интернете стянута откуда нибудь.

    • Александр, а кто у вас будет обслуживать запросы к серверу, если вы ограничитесь только dll файлом? Сами то пробовали?

      Что касается статьи, то писал я ее сам и уже один раз обновлял. Второй раз не планирую, так как с выходом новых версий php или mc ничего принципиально не меняется. Суть задачи остается прежней и способ решения описан.

  5. Спасибо за инструкцию, увы но нашёл я её слишком поздно, пару часов мучался собирал всё по кусочкам со всех блогов, и везде написано по разному и файлы разные сували, в итоге всё как у Вас написано и получилось, прям один в один и ошибка MSVCP71.dll даже была =) а если не сложно скажите пожалуйста, у меня DLE движок стоит, там указано кешировать memcache, и данные для подключения localhost:11211, правильно ли настроено ? я даже не могу определить включен ли кеш с этими настройками в DLE, так как ни каких сообщений он не выдаёт, заранее спасибо!

    • Да, должно работать. В любом случае, вы всегда можете создать тестовый скрипт и проверить на нем. Еще есть полезная утилита phpMemcachedAdmin.

  6. сообственно про localhost я понял, а вот порт какойто странный, стоит ли его вообще указывать ?

  7. спасибо, за быстрый ответ !)

  8. Олег, большое вам человеческое спасибо за выложенные файлы! Долго искала..

Добавить комментарий для Валера Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *