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 が自動起動します。





    Label
    memcached
    ProgramArguments
    
        /usr/local/bin/memcached
        -u
        devy
        -m
        32
    
    RunAtLoad
    


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

addServer('localhost', 11211);

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

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

';

上記コードの出力です。

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

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

以上。

コメントを残す

メールアドレスが公開されることはありません。

計算問題(認証) *