Имеются две основные проблемы, которые заставили меня написать эту заметку. Обе они упираются в крайне малую распространенность актуальных и рабочих версий вполне экзотических библиотек, собранных под ОС 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.
Установка
Процесс установки прост и отнимает не более нескольких минут времени
- Распаковываем Memcached в любую удобную вам папку
- С помощью командной строки (Пуск > Выполнить > cmd) запускаем установку Memcached
memcached.exe -d install - Заходим в Панель управления > Администрирование > Службы (в Windows Vista нечто аналогичное), ищем memcached Server и запускаем его. Также можно поставить тип запуска «Авто», дабы сервер автоматически стартовал при загрузке системы.
- В директории, где у нас лежит PHP, в папку ext кладем php_memcache.dll
- В файле 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
Из комментариев старого блога:
- Можно попробовать использовать сервер версии 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, где описывается способ борьбы с ней.