Вот пример использования функции без регулярных выражений. Этот способ работает в гораздо более широком диапазоне обстоятельств.
т.е. любое расширение файла работает, а подчеркивание или период допускаются в базовом имени
Если вам не нужны эти вещи, тогда использование preg_replace () более понятно, см. Ответ Майкла.
<?php
function nextUnusedFileName($path, $fileName){
$index = 1;
while (file_exists($path."/".$fileName))
{
$baseNameEndIndex = strrpos($fileName, '_');
$extensionStartIndex = strrpos($fileName, '.');
if($baseNameEndIndex <= 0){
$baseNameEndIndex = $extensionStartIndex;
}
$baseName = substr($fileName, 0, $baseNameEndIndex)."_".$index;
$extension = substr($fileName, $extensionStartIndex+1, strlen($fileName)-$extensionStartIndex);
$fileName = $baseName.".".$extension;
$index++ ;
}
return $fileName;
}//end nextUnusedFileName
//main
$dir = "images";
$filename = "123.jpg";
$filename = nextUnusedFileName($dir, $filename);
echo $filename;
?>