ファイルを保存する際、すでに同名のファイルがある場合、上書きを防ぐために「test_1.txt」のように、
番号を付加して保存するケースはよくあると思います。
この時、すでに「test_1.txt」が存在する可能性も考えられるので、その場合は「test_2.txt」として
数字を増やしておく必要があります。
このようなケースではファイル名の重複を再帰的に調べることになるので、下記サンプルのような再帰関数を利用します。
<?php
$filepath = unique_filename(dirname(__FILE__). '/' . 'test.txt');
file_put_contents($filepath, "sample");
echo $filepath;
function unique_filename($org_path, $num=0){
if( $num > 0){
$info = pathinfo($org_path);
$path = $info['dirname'] . "/" . $info['filename'] . "_" . $num;
if(isset($info['extension'])) $path .= "." . $info['extension'];
} else {
$path = $org_path;
}
if(file_exists($path)){
$num++;
return unique_filename($org_path, $num);
} else {
return $path;
}
}
例ではテキストファイル「test.txt」を保存しようとしています。
同名のファイルがなければそのままのファイル名で保存し、
存在している場合は「test_1.txt」「test_2.txt」のように番号を加えたファイルパスを返します。