Файл менеджеры в системе именуют копии чтобы их не перезаписывать, а сохранять с новым названием добавляя некий постфикс . Когда мы загружаем файл с одинаковым именем, копии названий именуются например так:
name.jpg name(1).jpg name(2).jpg name(3).jpg и т.д.
Чтобы реализовать это же на php можно сделать так:
$n = 1;
while (file_exists($dst_filename)) {
$pathinfo = pathinfo($dst_filename);
if (preg_match('#(.+)\(\d+\)$#', $pathinfo['filename'], $matches)) {
$dst_filename = $pathinfo['dirname'] . '/' . $matches[1] . '(' . $n . ')' . '.' . $pathinfo['extension'];
} else {
$dst_filename = $pathinfo['dirname'] . '/' . $pathinfo['filename'] . '(1)' . '.' . $pathinfo['extension'];
}
$n++;
}