проще, без регулярных выражений;
function renameDuplicates($path, $file)
{
$fileName = pathinfo($path . $file, PATHINFO_FILENAME);
$fileExtension = "." . pathinfo($path . $file, PATHINFO_EXTENSION);
$returnValue = $fileName . $fileExtension;
$copy = 1;
while(file_exists($path . $returnValue))
{
$returnValue = $fileName . '-copy-'. $copy . $fileExtension;
$copy++;
}
return $returnValue;
}
Быстрый бенчмарк для проблем с производительностью (32000 - это максимум файлов в папке):
$start = microtime(1);
$c=0;
while($c<32000)
if(file_exists(__FILE__))
$c++;
echo microtime(1) - $start; /* 0.44202709197998 */
Таким образом, для наихудшего сценария меньше половины секунды. А за 100 экземпляров - 0,0013940334320068 с. А что касается регулярного выражения:
$start = microtime(1);
$contains = preg_match_all ("/.*?(copy)(-)(\\d+)/is", __FILE__, $matches);
echo microtime(1) - $start; /* 0.010906934738159 */
поэтому, если вы планируете иметь более ~ 800 копий одного регулярного выражения файла, будет быстрее (на несколько микросекунд, но быстрее):)