MAMP環境にmemcachedをインストールした手順メモ

MacOSX の MAMP 環境の PHP に memcached をインストールした時の手順メモです。

「memcached」と「memcache」は違うので気をつけたほうがいいです。
勘違いして違う方をインストールするとハマります:(

brew で memcached をインストール

ターミナルから必要パッケージをインストールします。

brew install memcached
brew install libmemcached

memcached をサービスに登録する

サービスに登録するための plist ファイルを作成します。

vi /Library/LaunchDaemons/homebrew.memcached.plist

plist の中身は以下のように記述します。以下の例だと RunAtLoad が true になっているので Mac 起動時に memcached が自動起動します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>memcached</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/memcached</string>
        <string>-u</string>
        <string>devy</string>
        <string>-m</string>
        <string>32</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

plist ファイルをサービスに登録して、サービスを起動します。

sudo launchctl load /Library/LaunchDaemons/homebrew.memcached.plist
sudo launchctl start memcached

memcached のプロセスが起動していることを確認します。

ps aux | grep memcached

サービスを停止して、サービスの登録を解除する場合は以下のようにします。

sudo launchctl stop memcached
sudo launchctl unload /Library/LaunchDaemons/homebrew.memcached.plist

PHP の拡張モジュール memcached.so を有効にする

github の php-memcached-mamp プロジェクトから該当 PHP バージョンの memcached.so をダウンロードして、PHP の拡張モジュールが入っているディレクトリに入れておきます。PHP バージョンは MAMP で設定しているものと同じものを選択します。

拡張モジュールを入れるディレクトリのパスは phpinfo() の extension_dir の欄で確認できます。私の MAMP 環境の場合は /Applications/MAMP/bin/php/php5.4.10/lib/php/extensions/no-debug-non-zts-20100525/ でした。

入れただけではモジュールは有効になりませんので、php.iniに以下を追加します。

extension = "memcached.so"

php.ini のパスは同じように phpinfo() の Loaded Configuration File で確認できます。私の環境では /Applications/MAMP/bin/php/php5.4.10/conf/php.ini でした。

Apache を再起動しモジュールが有効になっていることを確認

Apache を再起動したら、phpinfo() を見て、memcached の項目が表示されるようになっていることを確認します。

phpinfoのmemcached欄

もし上手く表示されずモジュールがロード出来ない場合は apache_error.log に手がかりになるログがあるかもしれません。

tail -f /Applications/MAMP/logs/apache_error.log

PHPで実際に使ってみる

確認できるコードをてきとうに書きます。

PHP: Memcached – Manual

<?php
$m = new Memcached();
$m->addServer('localhost', 11211);

$m->set('int', 2013);
$m->set('string', 'hoge');
$m->set('array', array(10, 20));
$m->set('object', new stdclass);

echo '<pre>';
var_dump($m->get('int'));
var_dump($m->get('string'));
var_dump($m->get('array'));
var_dump($m->get('object'));
echo '</pre>';

上記コードの出力です。

int(2013)
string(4) "hoge"
array(2) {
  [0]=>
  int(10)
  [1]=>
  int(20)
}
object(stdClass)#2 (0) {
}

配列も気軽に放り込めるのはありがたい。LAMP環境でも大体同じ手順だと思います。

以上。