前回の記事でPHPでmemcacheが使えるようになりましたので、今回はPHPでセッション($_SESSION)をmemcacheに格納する設定を行います。
現状の設定確認
$ php -i | grep session.save
session.save_handler => files => files
session.save_path => no value => no value
デフォルトの設定ではセッションはファイル(files)に保存されます。 セッションファイルの保存先はphp.iniのsession.save_pathで設定されており、デフォルトは/tmpです。 セッションの保存先をファイルからmemcacheに変更します。
php.iniの編集
; php.iniの場所は環境によって異なるので適宜変更
; /usr/local/php/lib/php.ini
[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
; session.save_handler = files ;コメントアウト
session.save_handler = memcache ;追記
...(略)...
;session.save_path = "/tmp" ;コメントアウト
session.save_path = "tcp://localhost:11211" ;追記
11211はmemcachedのデフォルトのポート番号です。 memcached起動時にポート番号を変更している場合はそのポート番号を指定してください。 また、今回は同じサーバ(localhost)にmemcachedがインストールされていますが、 別サーバのmemcachedを使いたい場合は、localhostではなく、ホスト名やIPアドレスを指定してください。
WEBサーバ再起動
Apacheの場合
$ sudo service httpd restart
設定の確認
$ php -i | grep session.save
session.save_handler => memcache => memcache
session.save_path => tcp://localhost:11211 => tcp://localhost:11211
設定が反映されていることが確認できました。
セッションにデータを入れてみた
セッションにデータを入れてmemcachedにそのデータが保存されているかを確認します。
以下のようなサンプルプログラムを作成します。
// session.php
<?php
session_start();
if (! isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
echo $_SESSION['count'];
このファイルをWebサーバのドキュメントルートに設置して、ブラウザから確認してください。 ページを再読み込み(リロード)するたびに表示される数字が増えていくのが確認できると思います。
memcached からデータを確認するには、memcached-toodというコマンドを使います。 このコマンドはmemcachedをインストールすると自動的に使えるようになります。 memcached-toolコマンドでmemcachedのデータをdumpすると値が入っているのが分かります。
$ memcached-tool localhost:11211 dump
Dumping memcache contents
Number of buckets: 1
Number of items : 1
Dumping bucket 2 - 7 total items
add 1qo3mcvsq3t4v3dfg101327ki6 0 1372384743 10
count|i:1;
「count|i:1」というのが先ほどセッションに入れたデータです。 正しくデータがmemcachedに保存されていることが確認できました。