本日も乙

ただの自己満足な備忘録。

PHPのセッション管理にmemcacheを使う時の設定

前回の記事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に保存されていることが確認できました。

最後に

PHPのセッションをmemcachedに保存する設定を行いました。