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++;
}

3 ответов


вот небольшая модификация, которая, я думаю, должна делать то, что вы хотите:

$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++;
}

вдохновленный ответом @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";
}

существует несколько способов переименования изображения в 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);

}

проверить больше изображений переименование тактика