Как установить и использовать 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 ответов


Это для будущих туристов!

  1. проверьте phpinfo () и посмотрите, есть ли он в списке.
  2. Если нет, проверьте, включено ли расширение в 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 enter image description here

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;
}