Как установить и использовать memcached в Windows для PHP?
Я установил memcached двоичный файл в Windows 7 и запустил его как сервер.
когда я набираю wmic процесс получить описание, exetuablepath / findstr memcached.exe я получаю ответ: memcached.exe c:memcachedmemcached - ... exe в командной строке.
когда я пытаюсь запустить пример кода на php.net, я получаю в своем браузере:
фатальная ошибка: класс "Memcache" не найден в C:DocumentRootFrameworkindex - ... php On line 3 стек вызовов: 0.0010 335928 1. {main}() C:DocumentRootFrameworkindex - ... php: 0
Итак, что же я делаю неправильно? Я использую memcache.dll с memcached.dll не существует для Windows, я считаю?
4 ответов
Это для будущих туристов!
- проверьте phpinfo () и посмотрите, есть ли он в списке.
- Если нет, проверьте, включено ли расширение в php.ini, а затем проверьте журналы ошибок apache для сообщение об ошибке! dll должна соответствовать тому же компилятору php есть. (VC9 или VC6) кстати, memcache.DLL является штраф в размере
вы можете получить расширение php "memcache" для использования memcached с php в windows здесь http://downloads.php.net/pierre/
Memcached-это демон сервера, и вы можете получить его для windows здесьhttp://splinedancer.com/memcached-win32/
примечание для всех, кто сталкивается с проблемами с получением memcached работает на Windows.
- для начала убедитесь, что у вас есть правильная версия библиотеки dll memcached и что она доступна. Существует широкий выбор в http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/ и это все слишком легко выбрать неправильную версию memcached!.
- Если вы используете PHP 5.5, дополнительно требуется рнр5.файл DLL. Вы можете получить это здесь
- вам может потребоваться изменить настройки пути к среде, чтобы эту dll можно было найти. Перейдите на Мой Компьютер - >Свойства - >дополнительно и нажмите на переменные среды для просмотра / редактирования пути. Вы должны перезагрузить компьютер, если вы редактируете это.
- убедитесь, что установлен сервер memcached. Ctrl + Alt + Del и проверьте, что memcached присутствует в вашем списке услуг
- Если вам не нужно *установить его из командной строки Запуск от имени администратора (в меню Пуск выберите аксессуары, нажмите на командной строке и выберите Запуск от имени администратора) c:\pathtomemcached\memcached.ехе -д установка
- С c:\pathtomemcached\memcached.exe-D start или net start "memcached Server". На моей установке прежняя не работает
- аналогично, я не могу запустить memcached с вкладки "службы" задачи Менеджер!--8-->
- это удобно, чтобы иметь возможность играть с memcached на низком уровне так включить telnet, если требуется, и из командной строки введите telnet. Теперь откройте порт 11211 и попробуйте использовать memcached
- также полезно иметь возможность следить за тем, что происходит в memcached. phpMemCacheAdmin Это самый лучший инструмент для работы
основываясь на комментариях, я предполагаю, что вы не загрузили и не установили memcached, но успешно установили модуль memcached для PHP. В принципе, у вас есть ключи от машины, но нет машины.
memcached построен для Linux, но он был портирован другими в Windows. Этот учебник старый, но это может быть то, что вы ищете: http://www.codeforest.net/how-to-install-memcached-on-windows-machine
код composer.json
должно быть ext-memcached
перечислены в нем, но он не будет установлен, он просто выдаст ошибку, если она отсутствует. Вот различные способы, чтобы получить его:
Двоичный Маршрут Windows
AFAIK с 2018 года нет двоичного порта Windows только Memcached для PHP 7 Но есть готовые версии Laragon или Winginx
Windows DLL Route
там горстка людей, предлагающих скомпилированные библиотеки DLL на github (64-разрядный и потокобезопасный)
Подсистема Windows Для Linux Route
ubuntu
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt install php-memcached
перезагрузите php fpm, если используете его sudo service php7.2-fpm restart
компиляция из исходного маршрута
вы можете скомпилировать привязки php но пакет Windows memcached был сломан в течение 4 лет (по состоянию на 2018 год)
Локальные Файлы Кэша Polyfill Маршрут
вот грязная обертка вокруг Memcached под названием StaticCache, которую вы можете использовать в крайнем случае для чтения / записи значений с диска. Очевидно, что это медленнее, чем memcached, поэтому он предназначен только для разработки обуви для Windows. Если вам понравится, вы можете определить это как polyfill с тем же именем
function StaticCacheClear()
{
foreach (scandir(sys_get_temp_dir()) as $file) {
if (StringBeginsWith($file, "staticcache"))
{
$path = sys_get_temp_dir() ."/". $file;
unlink($path);
}
}
global $Memcache;
if ($Memcache) $Memcache->flush();
}
// REMOVE if you don't want a global way to clear cache
if (isset($_GET['clear_static_cache'])) {
StaticCacheClear();
}
function MemcacheGet($key)
{
global $Memcache;
$value = $Memcache ? $Memcache->get($key) : (file_exists($key)?file_get_contents($key):null);
return !$Memcache? $value : (Memcached::RES_NOTFOUND === $Memcache->getResultCode() ? null : $value);
}
function StaticCacheKey($key)
{
global $Memcache;
$cacheVersion = "MY_APP_VERSION_HERE";
$uniqueKey = "staticcache_{$key}_" . date("Ymd") . "$cacheVersion.cache";
$filename = sanitize_file_name($uniqueKey);
$filename = sys_get_temp_dir() . '/' . $filename;
return $Memcache ? $uniqueKey : $filename;
}
function StaticCacheWrite($key, $value)
{
global $Memcache;
if (isset($_GET['disable-cache'])) return null;
if ($Memcache)
$Memcache->set(StaticCacheKey($key), serialize($value));
else
file_put_contents(StaticCacheKey($key), serialize($value));
}
function StaticCacheRead($key)
{
global $Memcache;
$key = StaticCacheKey($key);
$value = MemcacheGet($key);
return $value !== null ? unserialize($value) : null;
}