[PHP]同じ名前のファイルが存在するときは番号(連番)を付ける

Facebook にシェア
Delicious にシェア
LINEで送る
Pocket

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


Similar Posts:




  • This entry was posted in PHP and tagged , . Bookmark the permalink.

    コメントを残す

    メールアドレスが公開されることはありません。