ファイルを保存する際、すでに同名のファイルがある場合、上書きを防ぐために「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:
- [PHP]よくあるエラーメッセージの原因と対処法 1
- [PHP]ZipArchiveクラスを使ったファイルのZip圧縮と展開(解凍)
- [PHP]ページごとの訪問者数を調べるアクセスカウンター
- [PHP]FTPでアップロードやダウンロード等のファイル操作を行う
- [PHP]ディレクトリー(フォルダ)の階層構造を維持したまま圧縮する
- [PHP]Fatal Error発生時にログを作成する
- [PHP]var_dump()、print_r()などの内容をファイルに保存する
- [PHP]似た画像を検索して近い順番に並べる(類似画像検索)