【PHP】 session_set_save_handlerについて
TOP > てきとうにこらむ > ゲーム作りとプログラミング日記 > 【PHP】 session_set_save_handlerについて
session_set_save_handlerについて
session_set_save_handlerは、セッションの保存関数を定義する関数である。PHPのマニュアル
失敗する条件
失敗した場合にFALSEを返す。マニュアルには、以下のように書いてある。
成功した場合に TRUE を、失敗した場合に FALSE を返します。
FALSEを返す条件は、どうやら以下のいずれか2パターンらしい。
- すでにセッションが始まっている
- 指定したコールバック関数が呼び出せない
引数の数がマニュアル通りになっていない場合には、Warningを発生させてNULLを返すようになっている。
$ php -r 'var_dump(session_set_save_handler());'
PHP Warning: Wrong parameter count for session_set_save_handler() in Command line code on line 1
PHP Stack trace:
PHP 1. {main}() Command line code:0
PHP 2. session_set_save_handler() Command line code:1
NULL
ソースを読む限りにおいては、そうなっている。PHP 5.3.22のext/session/session.cの1650行目。WRONG_PARAM_COUNTというマクロはWarningを出してからNULLを返す(厳密には何もしていないのでNULLになる)。
if (argc != 6) {
WRONG_PARAM_COUNT;
}
if (zend_parse_parameters(argc TSRMLS_CC, "+", &args, &num_args) == FAILURE) {
return;
}
Warningは、NULLを返す慣習があって、暗黙の了解となっているのだろうか?この辺り、ちょっとよくわからない…
session.auto_start
セッションがすでに始まっていると失敗してFALSEが返るいうことは、session.auto_startがonの場合には使えないということになる。もしもsession_set_save_handlerを使うのならば、session.auto_startはoffにしておこうと思う。
失敗した時にはFALSEが返るとは限らない
FALSEが返るとは限らないので、「失敗したかどうか」ではなく、「成功したかどうか」で判断するべきだと思う。つまり、「TRUEを返したかどうか」で判定する。
if (session_set_save_handler(...) !== TRUE) {
// エラー返すとかthrowするとか
}