web-dev-qa-db-ja.com

Windows for PHPにmemcachedをインストールして使用するにはどうすればよいですか?

MemcachedバイナリファイルをWindows7にインストールし、サーバーとして起動しました。

Wmic process get descriptionと入力すると、exetuablepath | findstr memcached.exeコマンドラインで次の応答が返されます:memcached.exe c:\ memcached\memcached.exe。

Php.netでサンプルコードを実行しようとすると、ブラウザが表示されます。

致命的なエラー:クラス 'Memcache'が3行目のC:\ DocumentRoot\Framework\index.phpに見つかりませんコールスタック:0.0010 335928 1. {main}()C:\ DocumentRoot\Framework\index.php:

それで、私が間違っているのは何ですか? memcached.dllがWindowsに存在しないため、memcache.dllを使用しています。

9
Koray Tugay

これは将来の訪問者のためです!

  1. phpinfo()をチェックして、リストされているかどうかを確認してください。
  2. そうでない場合は、php.iniで拡張機能が有効になっているかどうかを確認してから、Apacheエラーログでエラーメッセージを確認してください。 dllは、phpと同じコンパイラに準拠する必要があります。 (VC9またはVC6)ところで、memcache.dllは問題ありません

ここで、php拡張機能「memcache」を取得して、Windows上のphpでmemcachedを使用できます http://downloads.php.net/pierre/

Memcachedはサーバーデーモンであり、ここでWindows用に取得できます http://splinedancer.com/memcached-win32/

3
Venu

MemcachedをWindowsで動作させる際に問題が発生した場合の注意。

  • 手始めに、memcached dllの正しいバージョンがあり、アクセス可能であることを確認してください。 http://windows.php.net/downloads/pecl/releases/memcache/3.0.8/ およびで利用可能な幅広い選択肢があります。 memcachedの間違ったバージョンを簡単に選択できます!
  • PHP 5.5を実行している場合は、さらにphp5.dllが必要になります。これを取得できます ここ
  • このdllが見つかるように、環境のPATH設定を編集する必要がある場合があります。 [マイコンピュータ]-> [プロパティ]-> [詳細]に移動し、[環境変数]をクリックしてパスを表示/編集します。これを編集する場合は、コンピューターを再起動する必要があります。
  • memcachedサーバーがインストールされていることを確認します。 Ctrl + Alt + Delを実行し、memcachedがサービスのリストに存在することを確認します
  • そうでない場合は、* Cmdプロンプトからインストールします管理者として実行します(スタートメニューからアクセサリを選択し、コマンドプロンプトをクリックして実行することを選択します)管理者として)c:\ pathtomemcached\memcached.exe -d install
  • これに続いてc:\ pathtomemcached\memcached.exe -d startまたはnet start“ memcached Server 」。私のインストールでは、前者は機能しません
  • 同様に、タスクマネージャーの[サービス]タブからmemcachedを開始できません
  • 低レベルでmemcachedを試してみると便利なので、必要に応じて enable telnet 、コマンドプロンプトからtelnetと入力します。ポート11211を開いて、memcachedを使用してみてください
  • Memcachedで何が起こっているかを把握できると便利です。 phpMemCacheAdmin は仕事に最適なツールです
14
DroidOS

コメントに基づいて、memcachedをダウンロードしてインストールしていないと思いますが、PHP用のmemcachedモジュールは正常にインストールされています。基本的に、あなたは車の鍵を手に入れましたが、車を持っていません。

memcachedはLinux用に構築されていますが、他の人によってWindowsに移植されています。このチュートリアルは古いですが、探しているものかもしれません: http://www.codeforest.net/how-to-install-memcached-on-windows-machine

3
Michael Marr

きみの composer.json すべきだった ext-memcachedにリストされていますが、インストールされません。欠落している場合はエラーがスローされます。これを取得するさまざまな方法があります。

Windowsバイナリルート

2018年の時点で、PHP 7のJUSTMemcachedのバイナリWindowsポートはありませんが、 Laragon または代わりに Winginxenter image description here

Windows DLLルート

Githubで コンパイル済みDLL を提供している 少数の 人がいます(64ビット、スレッドセーフ提供)

Linuxルート用のWindowsサブシステム

ubuntu
Sudo add-apt-repository ppa:ondrej/php
Sudo apt-get update
Sudo apt install php-memcached

使用する場合はphpfpmを再起動しますSudo service php7.2-fpm restart

ソースルートからコンパイル

php bindings をコンパイルできますが、 memcached のwindowsパッケージが4年間壊れています(2018年現在)

ローカルのみのキャッシュファイルポリフィルルート

これは、ディスクから値を読み書きするためにピンチで使用できるStaticCacheと呼ばれるMemcachedのダーティラッパーです。明らかにmemcachedよりもはるかに遅いので、Windows開発のシューインとなることだけを目的としています。気になる場合は、これを同じ名前のポリフィルとして定義できます

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