ファイルを保存する際、すでに同名のファイルがある場合、上書きを防ぐために「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」のように番号を加えたファイルパスを返します。