PHPの関数の中には、最初は引数として用意されていなかったものの、後々
追加されたものが多く存在します。今回はその中から、よく使われる2つの
関数、print_r関数とsession_regenerate_id関数の知られざる引数を紹介し
ようと思います。
print_r関数は、変数やオブジェクトの中身を美しく表示してくれるため、
開発時に重宝している方も多いでしょう。たとえば下のように使用します。
print_r($a);
これで、変数$aの内容が美しくフォーマットされて、ブラウザに出力されま
す。実は、PHP 4.3.0からは2番目の引数が追加されました。これは、trueを
指定すると、ブラウザに出力するのではなく、その文字列を返却してくれ
るものです。たとえば
$dump = print_r($a, true);
と記述すると、ブラウザに出力されていたデータを$dump変数で受け取るこ
とができます。
後は、これをメールで送信するなりerror_log関数ではき出すなり、好きに加
工できるので便利です。
同じように、PHP 5.1からはsession_regenerate_id関数にも第1引数が指定さ
れました。第1引数をtrueに指定すると、古くなったセッションは削除され
るようになります。
もともとセッション固定攻撃を防ぐために用意された関数ではなく、PHP 5.1
までの同関数には古いセッションファイルを削除する機能が無かったため、
セッション固定攻撃への対策としては不十分でした。
今後は、session_regenerate_id関数の引数に必ずtrueを指定することを忘れ
ないようにしましょう。また、それまでのPHPで使う場合は、以下のコードを
使うことで、セッション固定攻撃を防ぐことができます。
$old_session_id = session_id();
session_regenerate_id();
unlink(session_save_path() . '/sess_' . $old_session_id);
それぞれの関数についての詳細は、マニュアルをご覧ください。
(アシアル 田中正裕)
この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。