我使用以下函数重命名缩略图。
例如,如果我将名为“image.png”的文件上载到上传文件夹,并且该文件夹中已经有一个名为“image.png”的文件,则新文件会自动更名为“image-copy-1巴纽”。如果还有一个名为“image-copy-1.png”的文件,它将被重命名为“image-copy-2.png”等。
以下函数返回新文件名。至少这就是它应该做的......
尽管如此,重命名并不能正常工作。有时会产生奇怪的结果,如:(我总是上传一个名为“1.png”的文件)
1-copy-1.png
1-copy-2.png
1-copy-2-copy-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 2010-03-15 09:57:09