[英]How to increment filename in php to prevent duplicates
在許多情況下,創建文件時,我們需要在服務器上使文件名不同,以防止重復。 最常見的答案似乎是,將時間戳記附加在末尾或將文件名存儲在db中,然后使用這些存儲的值來計算新名稱。 這些都是好事,但是,附加較長的時間戳並不總是非常用戶友好的,並且在數據庫中存儲並非總是一種選擇。 那么,如何在通過php創建標准文件名時自動增加標准文件名呢?
這是我為此目的編寫的一個簡單函數:
function incrementFileName($file_path,$filename){
if(count(glob($file_path.$filename))>0)
{
$file_ext = end(explode(".", $filename));
$file_name = str_replace(('.'.$file_ext),"",$filename);
$newfilename = $file_name.'_'.count(glob($file_path."$file_name*.$file_ext")).'.'.$file_ext;
return $newfilename;
}
else
{
return $filename;
}
}
用法:
$newName = incrementFileName( "uploads/", $_FILES["my_file"]["name"] );
move_uploaded_file($_FILES["my_file"]["tmp_name"],"uploads/".$newName);
所有這些答案似乎過分了:
$k = 0;
while(!$result){
if(!file_exists("file[$k].ext"))
$result = "file[$k].ext";
$k++;
}
makefile($result);
function incrementFileName($file_path,$filename){
$array = explode(".", $filename);
$file_ext = end($array);
$root_name = str_replace(('.'.$file_ext),"",$filename);
$file = $file_path.$filename;
$i = 1;
while(file_exists($file)){
$file = $file_path.$root_name.$i.'.'.$file_ext;
$i++;
}
return $file;
}
這是一個簡短的代碼段,演示了如何開始解決此問題。
// handle filename collision:
if(file_exists($newFile)) {
// store extension and file name
$extension = pathinfo($newFile,PATHINFO_EXTENSION);
$filename = pathinfo($newFile, PATHINFO_FILENAME);
// Start at dup 1, and keep iterating until we find open dup number
$duplicateCounter = 1;
// build a possible file name and see if it is available
while(file_exists($iterativeFileName =
$newPath ."/". $filename ."_". $duplicateCounter .".". $extension)) {
$duplicateCounter++;
}
$newFile = $iterativeFileName;
}
// If we get here, either we've avoided the if statement altogether, and no new name is necessary..
// Or we have landed on a new file name that is available for our use.
// In either case, it is now safe to create a file with the name $newFile
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.