session_regenerate_id関数:セッションIDを再生成する

使い方

//セッション情報を破棄せずに、セッションIDだけ再生成
session_regenerate_id( false );
//セッション情報を破棄して、再生成
session_regenerate_id( true );

セッションIDを変更して新しいセッションIDを自動的に生成するには、この関数を使います。
第1引数には、現在のセッション情報を破棄するかどうかを指定することが可能です。省略するとセッション情報は維持されます。

使いどころ

セッションIDと言うものは、ナマモノです。と言いますのも、セッションIDが他人に漏れてしまうとセッションハイジャックされてしまうからなのです。
セッションIDはなるべく推測できない文字列であること、そして、なるべく短い期間でセッションIDを変えることが推奨されます。
セッションの有効期限を短くすることもよいのですが、使い勝手がね。ほら。。かなり悪くなるからね。

そんな時にはこれ、この関数の出番ですよ。
遠慮なく使いなさい。遠慮なく。
まあ、一番いいのはセッションを使わないことですけどね。

ちょっと関係ないですが、
ログアウトの処理では、セッション情報を破棄するのを忘れずにね。

公式サイト

http://www.php.net/manual/ja/function.session-regenerate-id.php

unset関数:変数を破棄する

使い方

//変数の破棄
unset( $var );
//配列の特定要素の破棄
unset( $var['no_use'] );

使わなくなった変数を破棄したい、または配列の特定の要素だけ破棄したい。
そんな時はこの関数を使います。

グローバル変数を破棄するには、$GLOBALSの配列から該当の変数を破棄しなければなりませんのでご注意ください。

//グローバル変数の破棄
unset( $GLOBALS['no_use_var'] );

使いどころ

変数のスコープはなるべく小さい方が良い、なんて言われますが、PHPでプログラムを書かれる人の多くはそれをあまり意識しないでしょう。
それを強く意識するような人は別のプログラミング言語使ってそうですし。
PHPがプログラミング言語としての敷居が低いのは、そういった気遣いをしなくても簡単にプログラミングできるからでしょうね。

まあ、それはともかく配列から特定の要素だけ削除したいなんてことは稀にあるのではないでしょうか。
そういう時にはNULLなんか代入しちゃダメです。この関数を使って破棄してください。

私はよくセッション変数の破棄に使います。
セッションのうち必要なくなった情報なんかはなるべく破棄しましょう。こんな感じでね。

//セッションから特定の情報を破棄する
unset( $_SESSION['no_need_var'] );

公式サイト

http://www.php.net/manual/ja/function.unset.php

tempnam/tmpfile関数:一時的に利用するファイルを作成する

使い方

//A. 一時ファイルを作成する
$file_path = tempnam( $dir, $prefix );
//B. 一時ファイルを作成して、ファイルポインタのリソースを使いたい
$resource = tmpfile();

tempnam関数、この関数の名前を見るたびに不憫に感じます。ちゃんと最後にeつけてあげようよ。
tmpfile関数はtmpなのに、この関数はtemp….なんかこういうネーミングいやだ。
個人的にすごく気になるので、別名のエイリアスを作って使いたいくらいです。

とりあえずその話題はおいといて・・・
PHPで一時的に利用するファイルを作りたくなったら、tempnam関数もしくは、tmpfile関数を使うと良いでしょう。

tempnam関数は、指定したディレクトリに一意の名前のファイルを、特定の接頭辞付きで作ることができます。そして戻り値にそのファイルのパスを文字列で返してくれます。

tmpfile関数は、一時ファイル用のディレクトリ(sys_get_temp_dir関数で得られるディレクトリ)に、重複しない一意のファイル名のファイルを作成して、さらにそのファイルのファイルポインタリソースを返してくれます。
つまり、すぐに一時ファイルに書き込むことができるんです。
さらに、このtmpfile関数で作ったファイルはファイルをクローズすると勝手に削除までしてくれます。
なんて気の利いた関数なんでしょう。

だからこそ、余計に関数の名前が残念です。

サンプルプログラム

<?php
$file = tempnam('/tmp' , 'tempnam_');
echo "file: ".$file.PHP_EOL;

実行結果

file: /tmp/tempnam_4OZ8bU

使いどころ

tempnam関数とtmpfile関数のどっちを使うかが、この関数のポイントかとおもいます。

作った一時ファイルを別のディレクトリとかに移動させたり、コピーさせたりするときには、tempnam関数が良いと思います。なんたってファイル名が返ってきますからね。

一時ファイルにデータを書き込んで、スワップのような使い方をするのであれば、tmpfile関数をお勧めします。なんたって、fopenとかfcloseとかいう手間が省けますし、使い終わったら勝手に削除もしてくれますからね。

PHPには同じような機能を持つ関数が複数あることもあるので、適材適所で利点欠点を理解して使い分ければとてもプログラミングしやすくなるとおもいます。

公式サイト

http://www.php.net/manual/ja/function.tempnam.php
http://www.php.net/manual/ja/function.tmpfile.php