そのときの時分秒をファイル名に使用しても、重複する可能性はある。
ファイル名の重複を避ける便利な関数がある
tempnam関数を使えばよい。この関数は、重複しないファイル名でサイズ0バイトのファイルを生成する。
返り値は生成したファイル名。
どういう原理で重複を避けてるのか。。
パフォーマンスへの影響は?
tempnam関数を使ってファイルを生成→削除した場合と、使用しないで生成→削除した場合の比較してみる。PHP 5.2.5を使っています。
tempnam関数を使った場合
$time_start = microtime(); for($i = 0; $i < 1000; $i++){ $filename = tempnam($dir, $prefix); unlink($filename); } $time_end = microtime();
上のようなサンプルを書いて試した(主要な部分のみ抜粋)。
tempnam関数を使ってファイル生成→削除を1000回ループまわしています。
10回試して平均した結果。
4.3750467(秒)
tempnam関数を使わない場合
$time_start = microtime(); for($i = 0; $i < 1000; $i++){ $fp = fopen($dir.$prefix, "w"); fclose($fp); unlink($dir.$prefix); } $time_end = microtime();
単純にファイル生成→削除を1000回ループまわしています。
10回試して平均した結果。
2.738844(秒)
1.5倍くらい違うという結果になった
tempnam関数を使用すると1.5倍くらい遅くなる、という結果になった。そこまで劇的には変わらないようです。
でもどういう原理なんでしょうねー。
0 件のコメント:
コメントを投稿