- Memcached + PHP под Windows
- Установка
- Файлы Memcached и DLL
- Комментарии (11)
- Установка и настройка Memcached
- Как установить сервер Memcached
- Настройка Memcached
- Закрываем Memcached от доступа извне
- Увеличиваем объём рабочей памяти Memcached
- Хранение сессий PHP в Memcached
- Способ для расширения memcache
- Способ для расширения memcacheD
- Проверка phpinfo
- Готовый рабочий конфигурационный файл Memcached
- Установка расширения memcache
- Как проверить работу Memcached
- phpMemcachedAdmin — мониторинг, статистика и управление Memcached
- Установка и настройка phpMemcachedAdmin
- В заключение
- How to Install Memcached On Windows
- Solution 1 : install Memcached for Windows (v1.4.5)
- Solution 2: Install Couchbase to replace Memcached
- Conclusion
Memcached + PHP под Windows
Имеются две основные проблемы, которые заставили меня написать эту заметку. Обе они упираются в крайне малую распространенность актуальных и рабочих версий вполне экзотических библиотек, собранных под ОС Windows.
- Днем с огнем не найти php_memcache.dll
- Даже если мы нашли php_memcache.dll, нам осталось немало сил приложить к поиску работающего с ним Memcached.
Библиотеку php_memcache.dll я нашел в pecl версии 5.2.6-Win32. И, судя по всему, это последняя существующая версия pecl для Windows, во всяком случае, более поздних я не видел. Конечно, все это не проблема, если есть желание/время/возможность собрать библиотеку из исходников, но не об этом речь.
Установка
Процесс установки прост и отнимает не более нескольких минут времени
- Распаковываем 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, где описывается способ борьбы с ней.
Комментарии (11)
Большое спасибо! Полгода назад потратил целый день, чтобы найти файлы и настроить мемкэш. Сейчас снова понадобилось поднять на другой машине, по Вашей инструкции сделал это за 5 минут.
Если расширение не устанавливается под Windows, попробуйте LiteMemcache — самый легковесный клиент для Memcached, написанный на PHP. Реализована вся необходимая функциональность (включая CAS-операции). Покрыт юнит-тестами.
под win7 для установки memcached командную строку нужно запустить от имени администратора
А зачем устанавливать memcached в качестве службы, разве не достаточно php_memcached.dll
К стати статью нужно обновить, и на последние версии php можно найти php_memcached.dll, или статья как и многие в интернете стянута откуда нибудь.
Александр, а кто у вас будет обслуживать запросы к серверу, если вы ограничитесь только dll файлом? Сами то пробовали?
Что касается статьи, то писал я ее сам и уже один раз обновлял. Второй раз не планирую, так как с выходом новых версий php или mc ничего принципиально не меняется. Суть задачи остается прежней и способ решения описан.
Спасибо за инструкцию, увы но нашёл я её слишком поздно, пару часов мучался собирал всё по кусочкам со всех блогов, и везде написано по разному и файлы разные сували, в итоге всё как у Вас написано и получилось, прям один в один и ошибка MSVCP71.dll даже была =) а если не сложно скажите пожалуйста, у меня DLE движок стоит, там указано кешировать memcache, и данные для подключения localhost:11211, правильно ли настроено ? я даже не могу определить включен ли кеш с этими настройками в DLE, так как ни каких сообщений он не выдаёт, заранее спасибо!
Да, должно работать. В любом случае, вы всегда можете создать тестовый скрипт и проверить на нем. Еще есть полезная утилита phpMemcachedAdmin.
сообственно про localhost я понял, а вот порт какойто странный, стоит ли его вообще указывать ?
Да, указывайте. Это дефолтный порт, который слушает демон.
Установка и настройка Memcached
В результате применения информации, данной в этой статье, вы сможете установить и настроить сервер Memcached и нужное расширение php для взаимодействия с ним, а также сервис анализа и статистики phpMemcachedAdmin
Установка будет происходить под Debian с сервером бекенда Apache. Если у вас рабочая связка NGINX + php5-fpm, просто заменяйте в командах apache2 на php5-fpm
Рабочий инструментарий: файловый менеджер для подключения по ssh со встроенным редактором Far Manager или putty.
Теперь допустим, у нас на этом хостинге уже есть сайт http://example.com
Для начала, нужно определить, как сконфигурирован PHP (вдруг Memcached уже установлен?)). Для этого в корне сайта временно создадим файл info.php с кодом
Теперь заглянем в него http://example.com/info.php
Если видим, что есть похожая запись, значит, всё в порядке, нужное расширение php установлено.
Если нет, значит, придётся поработать.
Как установить сервер Memcached
Перед установкой нужно обновить репозиторий
Теперь установим memcached и модуль php под него
Идёт установка. После её завершения проверяем, что получилось
В результате мы увидим что-то навроде
Теперь нужно перезагрузить Apache или php-fpm
Настройка Memcached
Теперь, когда сервер установлен, его надо поднастроить. Это не сложно и не займёт много времени
Закрываем Memcached от доступа извне
Как вы видите, memcached висит на 11211 порту по умолчанию. Так как в memcached нет встроенных механизмов аутентификации, то выходит, что любой может подсоединиться извне и использовать его в своих целях. Чтобы избежать этого, вы можете либо закрыть порт 11211 с помощью фаервола, либо сконфигурировать memcached-сервер, чтобы он мог использоваться только с локального хоста. Ниже описан последний способ.
- Открываем конфигурационный файл
И снова проверяем
В итоге мы должны увидеть подобное
Также, после всех изменений не забудьте перезапустить Apache
Увеличиваем объём рабочей памяти Memcached
По умолчанию, в Memcached отведено на использование 64 мегабайта оперативной памяти. Я увеличу до 1024, вы исходите из параметров вашего сервера
- Открываем конфигурационный файл
- Находим значение
- Меняем его на
- Перезапускаем memcached
Хранение сессий PHP в Memcached
Если одним сервером или кластером Memcached пользуются несколько разных сайтов, то они могут перехватывать сессии друг друга и получать доступ к аккаунтам их пользователей, что представляет собой потенциальную опасность
Можно ускорить php, перенеся хранилище сессий из hdd в оперативную память с помощью memcached
Вы должны знать, какое расширение php вы используете, memcache или memcached . Между ними есть разница, а уточнить, что стоит у вас, можно с помощью phpinfo(), тут есть тонкость в настройках, будьте внимательны
Способ для расширения memcache
- Открыть /etc/php5/mods-available/memcache.ini
- Добавить
- Перезагрузить apache
Способ для расширения memcacheD
- Открыть /etc/php5/mods-available/memcached.ini
- Добавить
- Перезагрузить apache
Проверка phpinfo
Теперь нужно проверить, что имеем на выходе. Для этого, открываем страницу с phpinfo() и ищем в коде session.save_path в столбце с локальными значениями. В значении должно быть tcp://127.0.0.1:11211 или 127.0.0.1:11211 . Если значения не поменялись, смотрите конфиг домена в Апаче (например тут: /etc/apache2/vhosts/sheensay/sheensay.ru.conf ), а ищем
php_admin_value session.save_path
Кстати, также вы можете воспользоваться директивой php_value , чтобы настраивать не весь сервер глобально, а только конкретные сайты. Для этого, вы можете отредактировать .htaccess в корне вашего сайта
Готовый рабочий конфигурационный файл Memcached
Вы также можете настроить всё под свои потребности, конфигурационный файл содержит подробные комментарии:
Установка расширения memcache
Ниже пошагово указаны команды, с помощью которых вы сможете установить php-расширение memcache из консоли вручную
Перезагрузим Apache, чтобы изменения вступили в силу
Как проверить работу Memcached
Создадим в корне сайта файлик memcachetest.php и запишем туда следующий код
Теперь осталось проверить результаты: http://example.com/memcachetest.php
Если всё сделали правильно, увидите что-то навроде
phpMemcachedAdmin — мониторинг, статистика и управление Memcached
phpMemcachedAdmin — это программное обеспечение, предоставляющее веб-интерфейс для мониторинга и управления сервисом Memcached на Linux. Позволяет видеть в реальном времени статистику для всех поддерживаемых сервером операций: get, set, delete, increment, decrement, reclaimed, evictions, cas, а также серверную статистику: сеть, позиции, рабочую версию вкупе с чартами и внутренней серверной конфигурацией.
Установка и настройка phpMemcachedAdmin
Тут можно пойти несколькими путями: выделить отдельный домен или поддомен под работу этого сервиса. А можно сделать поддиректорию в рабочем сайте и поставить пароль на неё или настроить ограничение по IP. Я опишу последний способ с установкой пароля на папку как более простой.
Итак, допустим, у нас есть сайт https://sheensay.ru
Создаём директорию и переходим в неё
Скачиваем последнюю версию дистрибутива
Распаковываем и удаляем архив с дистрибутивом
Рекурсивно выставляем нужные права доступа в текущей директории
Создаём .htaccess для авторизации по паролю (в строку 4 вносите свой логин)
Вводите свой пароль.
На этом всё. Логин на каталог memcachedmanager , если вы не меняли его. Открываете https://sheensay.ru/phpMemcachedAdmin (домен меняете на свой), вводите логин/пароль и пользуетесь
В заключение
Рекомендую ознакомиться со статьёй про memcached. В ней раскрыта общая информация о нём и некоторые тонкости работы.
На этом всё. Если что непонятно, задавайте вопросы в комментариях
How to Install Memcached On Windows
While doing some web development, I needed to have Memcached (source code) installed on my local machine to closely simulate what was going on my server. I develop under windows, and realized that installing meme Memcached isn’t as straightforward as it is on Linux. There are actually quite a few people who ask about how to do it, so I’ll give you a couple of good options. Here’s how to install the caching system on Windows.
Solution 1 : install Memcached for Windows (v1.4.5)
This is the most obvious way to do it. It took me a tiny bit of time to locate the proper files, so I have included the links I used:
- Download a stable version, in either 32-bit or 64-bit I have tested the 64-bit version.
- Create a directory such as c:\memcached\ (or something else)
- Copy the .zip content to that directory. There should be one memcached.exe file by itself (32-bit) or with a couple of .dll files (64-bit)
- Open a command prompt (need to be opened as administrator). You can do this by going to Start>Search and type “cmd”
- Type the command “c:\memcached\memcached.exe -d start” to start the service
- Type the command “c:\memcached\memcached.exe -d stop” to stop the service
- To change the memory pool size, type “c:\memcached\memcached.exe -m 512” for 512MB
Your Memcached service should now run and wait incoming key/value pairs.
IMPORTANT NOTES:
1– If you want to use this in a local web app, you have to make sure that your language has built-in support for Memcached. For example, PHP may require the installation of additional libraries and modifications of the php.ini configuration file. If there’s a demand for it, I’ll write an explanation for that too.
2– The default configuration is to create a 64MB memory pool and listening on port 11211
3– Type the command “c:\memcached\memcached.exe -d install” to have Memcached started after a reboot. You should now see Memcached as a Windows Service in the control panel. IMPORTANT: if you choose to install it as a service, you lose the ability to change the pool size via command line. You will need to edit a registry key as follows:
- Launch regedit via Start>Search
- Find “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached”
- Edit the “–m VALUE” to the number of desired megabytes “–m 512” = 512 MB
Solution 2: Install Couchbase to replace Memcached
You may not have heard of it, but Couchbase is a JSON-based document store, but it also has an in-memory key/value store interface that is compatible with Memcached. This means that you can install Couchbase for Windows and configure it to act just like Memcached. The cool thing is that it comes with a cool graphical interface and a regular Windows installer.
Couchbase also has a great failover mechanism and cluster management that Memcached lacks, but this is a bit beyond the scope of this article.
- Go to the Couchbase download page
- Pick the Windows installer
- Launch the installer file
At the end of the installation process, the browser will open at the address http://localhost:8091/index.html and you will go through the initial setup. The important screen is this one:
For Memcached purposes, you can ignore the Disk storage settings, since you will create a memory pool. Just leave things the way they are.
Choose “start a new cluster” and pick the amount of RAM you want to use. Anything between 64 and 512MB will do. It’s really up to you, and you can change this later. Click Next and ignore the Sample buckets. Click Next again.
This is another important screen. It’s where you will create the memory pool. Make sure that you pick the Memcached Bucket Type. To emulate Memcached, you probably don’t need to enable the Replicas. But you should enable the Flush command. Click Next.
You can discard the Notifications and the registration if you want. Click Next.
The final phase is to setup your password. Click Next. And voila! You now have a running Memcached node that you can keep an eye on with a cool graphical interface in which you can inspect the content of the cache (useful for debugging!)
The default port for Memcached buckets is the standard 11211. You can change this in Data Buckets > [Bucket Name] > Edit
Conclusion
You now have two reliable ways to install Memcached on Windows machines. For development purposes, I like Couchbase, but if you want something light, the original Memcache port for Windows can’t be beat. If you have additional questions, just drop a comment, and I’ll do my best to reply. Thanks for reading this.