我使用以下函數重命名縮略圖。
例如,如果我將名爲「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