一時的にファイルを保管したい場合にファイル名が重複しなようにつけなければなりません。


ちなみに一時ファイルの事をみなさんは何て言っていますかね?


わたしは、テンポラリファイル、temporary、temp、一時ファイルとかですかね?


予断はさておき、1から順に振っていく場合は、ファイル番号1はあるかどうか?DBからシーケンス番号を取得する等あります。


だが、どれもオーバヘッドが大きくなるので、二重にならい用にユニークな文字列を付け、それをファイル名にする方法もあります。


今回はその方法で↓になります。

$file_name=md5(uniqid(rand(), true));
$file_name .= '.xml';


こんな感じで、できた文字列に拡張子をつければ完成です



内容としては次のような事をやってます。

rand関数でランダム文字列を取得。


uniqidでrand文字列をprefixにした文字列を生成。


生成された文字列からmd5関数を利用しハッシュ値を算出。


以上


これで一時(テンポラリ)ファイルのファイル名は作成完了。



後はtempname関数を利用すれば同様の事が可能です。


ディレクトリが既に決まっている場合は↓


$file_name=tempnam("/tmp", "pre");


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



一時ファイルに融通をきかせたい場合は、最初のやり方、特に何でもいい場合は後者がよいかと。


(更に一時ファイル自体を作成する関数もありますんで、TPOで使い分けを)