PHP Переименовать имя файла, если оно существует.
Я пытаюсь переименовать имя файла изображения при его загрузке, если он существует, скажем, если мое имя файла test.jpg
и оно уже существует. Я хочу переименовать его как test1.jpg
, а затем test2.jpg
и скоро. С кодом, который я написал, меняя имя моего файла таким образом test1.jpg
, а затем test12.jpg
, любой совет по исправлению этого будет очень благодарен!
PHP
$name = $_FILES['picture']['name'];
$actual_name = pathinfo($name,PATHINFO_FILENAME);
$extension = pathinfo($name, PATHINFO_EXTENSION);
$i = 1;
while(file_exists('tmp/'.$actual_name.".".$extension))
{
$actual_name = (string)$actual_name.$i;
$name = $actual_name.".".$extension;
$i++;
}
Ответы
Ответ 1
Здесь небольшая модификация, которая, я думаю, должна делать то, что вы хотите:
$actual_name = pathinfo($name,PATHINFO_FILENAME);
$original_name = $actual_name;
$extension = pathinfo($name, PATHINFO_EXTENSION);
$i = 1;
while(file_exists('tmp/'.$actual_name.".".$extension))
{
$actual_name = (string)$original_name.$i;
$name = $actual_name.".".$extension;
$i++;
}
Ответ 2
Вдохновленный от @Jason ответ, я создал функцию, которую я считаю более коротким и более читаемым форматом имени файла.
function newName($path, $filename) {
$res = "$path/$filename";
if (!file_exists($res)) return $res;
$fnameNoExt = pathinfo($filename,PATHINFO_FILENAME);
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$i = 1;
while(file_exists("$path/$fnameNoExt ($i).$ext")) $i++;
return "$path/$fnameNoExt ($i).$ext";
}
Ответ 3
Существует несколько способов переименования изображения в PHP перед загрузкой на сервер.
добавление метки времени, уникальный идентификатор, размеры изображения плюс случайное число и т.д. Вы можете увидеть их все здесь
Сначала проверьте, существует ли файл изображения в папке с размещенным изображением, иначе загрузите его. Цикл while проверяет, существует ли имя файла изображения и добавляет уникальный идентификатор, как показано ниже...
function rename_appending_unique_id($source, $tempfile){
$target_path ='uploads-unique-id/'.$source;
while(file_exists($target_path)){
$fileName = uniqid().'-'.$source;
$target_path = ('uploads-unique-id/'.$fileName);
}
move_uploaded_file($tempfile, $target_path);
}
if(isset($_FILES['upload']['name'])){
$sourcefile= $_FILES['upload']['name'];
tempfile= $_FILES['upload']['tmp_name'];
rename_appending_unique_id($sourcefile, $tempfile);
}
Проверить еще изображение тактика переименования