2012-12-29 39 views
3

在PHP中是否有任何漂亮的解決方案,允許我使用自動增量編號擴展文件名,如果文件名已存在?我不想在一些不可讀的東西中重命名上傳的文件。所以我認爲這會是這樣漂亮:PHP文件上傳:保留兩個文件,如果名稱相同

Cover.png 
Cover (1).png 
Cover (2).png 
… 
+0

使用file_exists()函數可以非常簡單地實現這個 –

+0

但是file_exists只能給我提供true或false的代碼... –

+1

你需要照顧更多的東西,先編寫簡單的算法然後在編碼中實現它,你 –

回答

6

首先,讓我們單獨的擴展和文件名:

$file=pathinfo(<your file>); 

爲了方便文件檢查和追加,保存的文件名到新的變量:

$filename=$file['filename']; 

然後,讓我們來檢查文件是否已經存在,並保存新的文件名,直到它不存在:

$i=1; 
while(file_exists($filename.".".$file['extension'])){ 
$filename=$file['filename']." ($i)"; 
$i++; 
} 

在這裏,你有一個原始文件,你的<append something>還不存在。

編輯: 增加了自動增量編號。

+0

很容易!!! :)但自動增量解決方案更好,我認爲。但是,謝謝! –

+0

已編輯並添加自動增量;) –

+0

您的代碼需要稍微修復。 –

-2

使用file_exists()功能和rename()函數來實現你想要做什麼(所有圖像文件是允許的。)!

+0

我是否需要任何正則表達式?當然,我可以檢查原始文件名是否已經存在,但是如果我想上傳另一個Cover.png,我該如何識別已經有多少個? –

2

明白了:

if (preg_match('/(^.*?)+(?:\((\d+)\))?(\.(?:\w){0,3}$)/si', $FILE_NAME, $regs)) { 
     $filename = $regs[1]; 
     $copies = (int)$regs[2]; 
     $fileext = $regs[3]; 

     $fullfile = $FILE_DIRECTORY.$FILE_NAME; 
     while(file_exists($fullfile) && !is_dir($fullfile)) 
     { 
       $copies = $copies+1; 
       $FILE_NAME = $filename."(".$copies.")".$fileext; 
       $fullfile = $FILE_DIRECTORY.$FILE_NAME; 
     } 
} 
return $FILE_NAME; 
+0

您可以使用['' pathinfo'](http://php.net/manual/en/function.pathinfo.php),而不是正則表達式;這種方法更簡單, –

相關問題