Во многих ситуациях нам необходимо сделать имя файла другим на сервере при их создании для предотвращения дублирования. И наиболее распространенным ответом на это кажется: добавьте отметку времени в конец или сохраните имя файла в db и используйте эти сохраненные значения для вычисления нового имени. Это хорошо и все, но добавление длинного штампа не всегда очень удобно, а хранение в 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);
в$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; }
в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; }