私のMacのローカル環境は、MAMPを使って構築しています。
この前、APIを無料枠で使いたくてリクエスト回数を減らすために「memcached」を導入したので、その時の手順メモ。
memcacheとmemcachedは違う
手順通りやってもなぜかエラーが起きるという人は、これをまず確認してください。
memcacheとmemcached、ごっちゃになってないですか?わたしは、1年以上memcacheを使っていたにも関わらず、混同してました^^memcacheを使っていると思っていたら、memcachedだったのです・・・
memcacheとmemcachedは、両方とも「memcachedをPHPから利用するためのモジュール」です。
それぞれ対応しているPHPのバージョンなどが違ったりするので、自分の利用したい環境に応じて、好きな方を選ぶと良いと思います。
memcacheとは
- 利用可能バージョン:PHP4.3.3以上
- インストール時に他のライブラリに依存しない
- 複数サーバーに対応できる(分散が可能)
memcachedとは
- 利用可能バージョン:PHP5.2.0以上
- モジュール「libmemcached」のインストールが必要
- memcacheより利用できる機能が多いらしい。
例:文字列ではなくてバイナリ形式でのシリアライズ方式のサポート
- 複数サーバーに対応できる(分散が可能)
※私はわかりませんが、memcachedのほうがパフォーマンスが良い、と書かれている方もいます。
今回の記事では、memcachedをMAMP環境にインストールする、というところをやっていきます。
memcachedのインストール方法
brewでインストールする
Homebrewをつかって、必要なパッケージをインストールします。
今回はmemcachedを使うため、必要なlibmemcachedもインストールします。
brew install memcached brew install libmemcached
memcachedをサービスに登録する
インストールしたmemcachedを起動するため、サービスに登録します。
登録の方法は、plistファイルを作成することです。
/Library/LaunchDaemons/
にhomebrew.memcached.plist
というファイルを作成します。
vi /Library/LaunchDaemons/homebrew.memcached.plist
作成したら、下記の内容をコピペして書き込みます。
<?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>
RunAtLoad
がTRUEになっているので、PC起動時にmemcachedも自動で起動されるようになります。
作成したplistファイルをサービスに登録します。登録したら、サービスを起動します。
launchctl load /Library/LaunchDaemons/homebrew.memcached.plist launchctl start memcached
コマンドが実行できない場合は、sudo
を頭につけて実行してみてください。
(おまけ)サービスを停止して、サービスから登録を解除するとき
launchctl stop memcached launchctl unload /Library/LaunchDaemons/homebrew.memcached.plist
PHP の拡張モジュール memcached.so をダウンロードする
まず、自分の環境にすでにインストールされているPHPのバージョンを調べます。
php -v
わたしの場合、実行結果は下記のようになりました。
PHP 5.5.36 (cli) (built: May 29 2016 01:07:06) Copyright (c) 1997-2015 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
PHPのバージョンは「5.5.36」です。
そのPHPのバージョンに該当しているmemcached.so
を下記のサイトからダウンロードして、ディレクトリに設置します。
GitHub - majksner/php-memcached-mamp: Pecl Memcached Extension for MAMP 3.x
設置するディレクトリは、phpinfo()
のextension_dir
の欄に書いてあるので、PHPが実行できるところで下記のように書いて、ブラウザからそのページにアクセスすると表示されます。
phpinfo()
私の場合は、/Applications/MAMP/bin/php/php5.6.10/lib/php/extensions/no-debug-non-zts-20131226/extension_dir
となりました。
PHP の拡張モジュール memcached.so を有効にする
ダウンロードして設置したmemcached.soを有効にします。
php.iniに下記を記述します。
extension = "memcached.so"
php.ini
のファイルの場所がわからない場合、先ほどと同様にphpinfo()でLoaded Configuration File
の場所を確認ください。
私の場合は、/Applications/MAMP/bin/php/php5.6.10/conf/php.ini
でした。
php.iniに追記を行います。
私はすでにいくつか拡張モジュールを入れていたので、下記のように書き足しました。(下から2行目)
;extension=apcu.so extension=imap.so extension=yaz.so extension=mcrypt.so extension=gettext.so extension=pgsql.so extension=pdo_pgsql.so extension=memcached.so ;extension=imagick.so
追加したモジュールが有効になっていることを確認
apacheを再起動して、先ほど追加したモジュールが有効になっていることを確認します。
まず、apacheを再起動します。私はMAMPの画面から再起動を行いました。
再起動が終わったら、再度phpinfo()
を表示して、memcached の項目があるか確認します。
コンパイルエラーが起こったら
私はここのタイミングでコンパイルエラーが起きました。
A PHP Error was encountered Severity: Core Warning Message: PHP Startup: memcached: Unable to initialize module Module compiled with module API=20121212 PHP compiled with module API=20131226 These options need to match Filename: Unknown Line Number: 0 Backtrace:
memcached.soを、PHP5.5向けのものから、PHP5.6向けのものに変更して再起動したら、正常にmemcached の項目が表示されました。
完成!