ファイル名がすでに存在する場合、自動インクリメント番号でファイル名を展開できるPHPのきれいな解決策はありますか?アップロードしたファイルの名前を判読できないものに変更したくありません。だから私はそれがこのようにいいだろうと思いました:(すべての画像ファイルが許可されています。)
Cover.png
Cover (1).png
Cover (2).png
…
ファイル名がすでに存在する場合、自動インクリメント番号でファイル名を展開できるPHPのきれいな解決策はありますか?アップロードしたファイルの名前を判読できないものに変更したくありません。だから私はそれがこのようにいいだろうと思いました:(すべての画像ファイルが許可されています。)
Cover.png
Cover (1).png
Cover (2).png
…
まず、拡張子とファイル名を分けましょう。
$file=pathinfo(<your file>);
ファイルのチェックと追加を簡単にするには、ファイル名を新しい変数に保存します。
$filename=$file['filename'];
次に、ファイルがすでに存在するかどうかを確認し、存在しないまで新しいファイル名を保存します。
$i=1;
while(file_exists($filename.".".$file['extension'])){
$filename=$file['filename']." ($i)";
$i++;
}
さあ、あなたは<append something>
まだ存在していないあなたのオリジナルファイルを持っています。
編集: 自動増分番号を追加しました。
とった:
if (preg_match('/(^.*?)+(?:\((\d+)\))?(\.(?:\w){0,3}$)/si', $FILE_NAME, $regs)) {
$filename = $regs[1];
$copies = (int)$regs[2];
$fileext = $regs[3];
$fullfile = $FILE_DIRECTORY.$FILE_NAME;
while(file_exists($fullfile) && !is_dir($fullfile))
{
$copies = $copies+1;
$FILE_NAME = $filename."(".$copies.")".$fileext;
$fullfile = $FILE_DIRECTORY.$FILE_NAME;
}
}
return $FILE_NAME;
以下のこの関数を使用して、アップロードするための一意の名前を取得できます
function get_unique_file_name($path, $filename) {
$file_parts = explode(".", $filename);
$ext = array_pop($file_parts);
$name = implode(".", $file_parts);
$i = 1;
while (file_exists($path . $filename)) {
$filename = $name . '-' . ($i++) . '.' . $ext;
}
return $filename;
}
その関数を次のように使用します
$path = __DIR__ . '/tmp/';
$fileInput = 'userfile';
$filename = $path .
get_unique_file_name($path, basename($_FILES[$fileInput]['name']));
if (move_uploaded_file($_FILES[$fileInput]['tmp_name'], $filename)) {
return $filename;
}
ここでgithubページから作業スクリプトを入手できます
file_exists()
関数と関数を使用rename()
して、あなたがやろうとしていることを達成してください!