
Вступление
В принципе, вступление тут вовсе не требуется, но так уж получается, что не могу я не налить воды. Зато во вступлении могу заранее предупредить, что мы будем не просто ставить Memcached, но и пытаться подружить его с PHP, и все это под всеми любимой ОС Windows. Именно эти нюансы рождают проблему и решение, описанные ниже.
Кто-то может задать вполне резонный вопрос — а зачем под Windows? Могут дать вполне резонный ответ — а вот нужно. Нужно это бывает тогда, когда программист и швец и жнец, и на дуде игрец.
Во-первых, если приходится писать не только программный код, но и решать вопросы верстки, а это весьма частый случай, то без Photohop’а и старого доброго IE никуда, а они в свою очередь как-то не прижились под линуксами. Во-вторых, как не крути, а линуксы не всем такие родные, как продукт дядюшки Билла.
В чем же сложность?
У нас имеются две проблемы, которые заставили меня написать этот материал. Обе они упираются в такую малую распространенность актуальных и рабочих версий вполне экзотических библиотек, собранных под ОС Windows.
- Днем с огнем не найти php_memcache.dll
- Даже если мы нашли php_memcache.dll, нам осталось немало сил приложить к поиску работающего с ним Memcached.
Библиотеку php_memcache.dll я нашел в pecl версии 5.2.6-Win32. И, судя по всему, это последняя существующая версия pecl для Windows, во всяком случае, более поздних я не видел. Конечно, все это не проблема, если есть желание/время/возможность собрать библиотеку из исходников, но не об этом речь.
Библиотекой для PHP мы обзавелись (ссылки на скачивание в конце статьи), осталось скачать сам демон. На момент написания статьи, из стабильных версий для скачивания доступна 1.2.8, но вот беда, упомянутая библиотека с ней конфликтует. Благо на винте была более ранняя версия демона, а именно 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 :)
P.S: Не пользуйтесь Windows, ну хотя бы Вистой :) Удачи!
Файлы:
Автор: Мурашов Олег
Источник: http://inroot.ru/

Отлично все описано, спасибо, помогло.
Установил с версией мемкешеда 1.2.6 (взял здесь http://code.jellycan.com/memcached/) и Вашим dll.
На здоровье. За дополнительную информацию спасибо
пробовал ставить под vista64
сервис ставится и работает phpinfo пишет что тоже все ок
var_dump выдает:
object(Memcache)[1]
public ‘connection’ => resource(3, memcache connection)
однако при попытке обратиться к мемкешу получаю следующее сообщение:
Notice: Memcache::getversion() [memcache.getversion]: Server 127.0.0.1 (tcp 11211) failed with: Failed reading line from stream (0) in …
при запуске мемкеша в консоли вижу что PHP коннектится и посылает запрос,
мемкеш ему отвечает VERSION 1.2.1
и далее пишет
failed to write, and not due to blocking: Resource temporarily unavailable
в PHP соответственно ошибка описанная в предыдущем посте
А php код покажите пожалуйста, а то уж очень странно ругается MC
А под PHP 5.3 что-то не заводится… =(
А на что жалуется? В принципе, подозреваю, что это из-за php_memcache.dll. Если будет время, пересоберу библиотеку из исходников и выложу здесь. Или можете попробовать сделать это самостоятельно
С PHP 5.3 apache при запуске выдает:
memcache: Unable to initialize module
Module compiled with module API=20060613
PHP compiled with module API=20090626
These option need to match
Видимо, пересборка поможет.
Сейчас попробую подключить к php 5.3.1 под денверном. Пожелайте мне удачи )
Удачи :) Сообщайте о результатах)
Если будет время, соберу из исходников dll для 5.3.*
Олег, не надо, все уже собрали за нас ) http://downloads.php.net/pierre/php%5Fmemcache-cvs-20090703-5.3-VC6-x86.zip (ну или можно просмотреть саму директорию).
Так что вот. Вроде работает, но Doctrine почему-то не кэшируется (по крайней мере плюсов не вижу).
Спасибо за ссылочку, а то я про нее как-то и не знал
Доброе время суток поставил , установил, но PHP не видет Memcache ,что не так сделал подскажите! PHP Version 5.2.1
Что значит не видит? В phpinfo есть секция Memcache? Если нет, значит вы не установили расширение mc. Или версия не подходит.
Установил как выше написано и запустил , в процессах отображается, а вот в PHP нет.Операционная система стоит Windows XP SP3, может в ней проблемка?
А что такое расширение mc , подскажите как устанавливать :)
“А что такое расширение mc”
Я имел ввиду PHP Extension php_memcache.dll. Обратите внимание на 5 и 6-й пункты описания процесса установки. Также посмотрите, есть ли информация о Memcached в phpinfo. Если нет, значит PHP не подхватил DLL по какой-то причине.
Во спс )) поставил другой php и заработало вот данные
Active persistent connections 0
Version 2.2.4-dev
Правельно или нет? ))
Откуда эти данные? Чтобы узнать, правильно ли установлен сервер, проще всего создать тестовый скрипт :)
И ни одного упоминания где взять класс для работы с memcache
По-моему, только об этом здесь и упоминается
>>По-моему, только об этом здесь и упоминается
memcached.exe – да
php_memcache.dll – да
Но ткните носом… на ссылку вида classMemcahe.php
Или каким образом будут работать конструкции:
// Помещаем данные в кэш на 24 часа
$cache->set(‘user’ . $user_id, $user_data, MEMCACHE_COMPRESSED, 60*60*24);
Установка php_memcache.dll делает доступным класс Memcache. Создаете от него объект и используете. Никаких дополнительных файлов с расширением php подключать не нужно.
Ура! Спасибо!
Всегда пожалуйста :)
У меня что-то не получается, пробовал делать по пунктам:
memcached.exe -d install выполнил не в командной строке, а в тотал командере, после этого выполнил строчку в cmd и получил вот что: failed to install service or service already installed
в службах memcached Server нету (
phpinfo ничего про mc не знает (dll кинул, в .ini прописал)
ОС – Виста
PHP 5.1.2
MC 121
Помогите разобраться пожалуйста!
То, чем выругалась командая строка, означает, что MC установился. Может вы в службах плохо смотрели? Если смотрели хорошо, а все равно сервис отсутствует, попробуйте переустановить MC, но уже из консоли, запущенной от администратора.
Я вообще не силен в администрировании Windows, поэтому просто предполагаю.
Что касается DLL, то ситуация не менее странная. Уверены, что все правильно сделали? Если бы версия dll не подходила, то PHP выругался бы при запуске.
Покажите что ли как вы в php.ini подключаете библиотеку.
С установкой MC разобрался, нужно запустить cmd от администратора как вы и сказали, это можно сделать как описано здесь: http://blogs.msdn.com/b/tims/archive/2006/11/02/windows-vista-secret-10-open-an-elevated-command-prompt-in-six-keystrokes.aspx (кому лень читать – просто нужно набрать в стартовом меню cmd и нажать ctrl+shift+enter и cmd запустится в режиме админа) …. так вот, служба появляется все ок, а вот phpinfo() ниче про MC не выдает, я сделал все как описано в статье, вставил в php.ini строку extension = php_memcache.dll, в папке ext dll лежит …
В общем, разобрался наконец … дело было наверно в настройке самого PHP и Apache, переустановил эти компоненты и настроил по этому руководству – http://www.tmanager.ru/russian/apache.html – все заработало
ЗЫ. PHP 5.3.2, Apache 2.2.15
Признаться, не вижу смысла вручную собирать Apache+PHP+MySQL под винду.Если уж тратить время, то под Linux. Впрочем, там вариантов особо нет. А вот под Win платформу проще всего взять какой-то готовый пакет. Я использовал Denwer. Быстро и удобно. Установка занимает пару минут. Сервер можно перенести с одной машины на другую простым копированием. Есть масса аналогов, на любой цвет.
В любом случае, поздравляю с успехом :)