tempnam

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