Я использую следующую функцию для переименования миниатюр.
Например, если я загружаю файл с именем «image.png» в папку для загрузки, и в этой папке уже есть файл с именем «image.png», новый файл автоматически переименовывается в «image-copy-1» .png». Если также есть файл с именем «image-copy-1.png», он переименовывается в «image-copy-2.png» и так далее.
Следующая функция возвращает новое имя файла. По крайней мере, это то, что он должен делать ...
Переименование не работает правильно. Иногда это приводит к странным результатам, как: (Я всегда загрузил файл с именем "1.png")
1-копия-1.png
1-копия-2.png
1-копия-2-копия-1 .png
1-copy-2-copy-3.pngпереименовывать файлы с таким же именем.
Надеюсь, вы понимаете мою проблему, несмотря на то, что мое описание несколько сложное ... Можете ли вы сказать мне, что здесь не так? (Бонус вопрос: регулярные выражения правильный инструмент для ведения такого рода вещи?)
<?php
function renameDuplicates($path, $file)
{
$fileName = pathinfo($path . $file, PATHINFO_FILENAME);
$fileExtension = "." . pathinfo($path . $file, PATHINFO_EXTENSION);
if(file_exists($path . $file))
{
$fileCopy = $fileName . "-copy-1";
if(file_exists($path . $fileCopy . $fileExtension))
{
if ($contains = preg_match_all ("/.*?(copy)(-)(\\d+)/is", $fileCopy, $matches))
{
$copyIndex = $matches[3][0];
$fileName = substr($fileCopy, 0, -(strlen("-copy-" . $copyIndex))) . "-copy-" . ($copyIndex + 1);
}
}
else
{
$fileName .= "-copy-1";
}
}
$returnValue = $fileName . $fileExtension;
return $returnValue;
}?>
Большое спасибо за ваш ответ (а также за ответ на вопрос о бонусе)! – snorpey