Подтвердить что ты не робот

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

Ответ 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);

}

Проверить еще изображение тактика переименования