HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

WindowsにPHP+Memcached環境を導入する

ブクマ(何)とかを見ると1ヶ月ほど前の話になるのだが、Windows Vista上にPHP+Memcached環境を導入したらしい。
ただ、変なところでひどく苦労したので、導入時点での情報をまとめてみる。

Memcachedの導入

まずはサーバーの導入。
基本的な手順としては、以下のサイトにあるとおり。

しかし、Windows用バイナリのダウンロードサイトであるリンク先がすでに存在しないという‥orz
ここからが長い旅だったのだが、結局、WikipediaのページからのリンクをたどってやっとこさWindows用バイナリにたどり着いたらしい。


まとめると、2011年2月9日現在(たぶん2011年3月5日時点でも)有効な手順は次のとおり。

  1. 以下のサイトから、"memcached 1.2.4 Win32 Beta Binaries"(memcached-1.2.4-Win32-Preview-20080309_bin.zip)をダウンロード。
  2. ダウンロードしたファイルを適当なところに解凍
  3. コマンドプロンプトで以下のコマンドを実行してWindowsサービスのインストールと起動
CD /D E:\develop\devServer\memcached-1.2.4-Win32-Preview-20080309_bin
memcached.exe -d install
memcached.exe -d start

PHP拡張モジュールの導入

PHPからMemcachedにアクセスするためには、PHPの拡張モジュールを入れなきゃいけないということで、それの導入。
基本的な手順としては、以下のようになる。

  • 拡張モジュールのダウンロード
  • php.iniの設定編集
  • Webサーバーの再起動

しかし、これがまた長い旅だった。
まず、以下のサイトから、その下のサイトにたどり着いた。

しかし、PHP 5.3用のファイルがないため、次へ。
で、次のサイトにたどり着き、

「そう、これこれ」と思ったら、VC6版はなくなっている‥
結局、以下のサイトにたどり着き、

ページ中ほどのコメント(キーワード"php_memcache-cvs-20090703-5.3-VC6-x86.zip"で探したときの2番目の一致箇所)に書いてあるリンクからダウンロード。


まとめると、2011年2月9日現在(たぶん2011年3月5日時点でも)有効な手順は次のとおり。

  1. 以下のサイトにあるリンクから、php_memcache-cvs-20090703-5.3-VC6-x86.zip をダウンロード
  2. ダウンロードしたファイルを解凍し、php_memcache.dll を適切な場所に配置する。
  3. php.ini を開き、PHPセクションの適当な場所に以下のような記述を追加
    • extension=php_memcache.dll
  4. Apacheを再起動

動作確認

以下のようなPHPファイルを作成して、動作を確認。

<pre><?php
$memcached = new Memcache();
$memcached->connect('localhost', 11211);

function test($memcached, $key, $value) {
    print('================================' . "\n");
    $val = $memcached->get($key);
    var_dump($val);
    print('--------------------------------' . "\n");
    $memcached->set($key, $value, MEMCACHE_COMPRESSED, 30);
    $val = $memcached->get($key);
    var_dump($key);
    print('=');
    var_dump($val);
}

test($memcached, 'hogehoge', 'HogeHoge');
test($memcached, 'hogefoo', 'HogeFoo');
test($memcached, 'foohoge', 'FooHoge');
test($memcached, 'foofoo', array('foo1' => 5, 'foo2' => array('bar1' => 'BAR1')));
?>

出力はこんな感じ。

================================
bool(false)
--------------------------------
string(8) "hogehoge"
=string(8) "HogeHoge"
================================
bool(false)
--------------------------------
string(7) "hogefoo"
=string(7) "HogeFoo"
================================
bool(false)
--------------------------------
string(7) "foohoge"
=string(7) "FooHoge"
================================
bool(false)
--------------------------------
string(6) "foofoo"
=array(2) {
  ["foo1"]=>
  int(5)
  ["foo2"]=>
  array(1) {
    ["bar1"]=>
    string(4) "BAR1"
  }
}

妄想

MinGW/MSYS環境なら、ソースからコンパイルして動作させることができたりして‥まぁ、それはまた別の機会(何時)に。