web-dev-qa-db-ja.com

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

ここにあなたが望むことをするべきだと思うマイナーな修正があります:

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

@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";
}
4
Fandi Susanto

サーバーにアップロードする前にPHPで画像の名前を変更する方法はいくつかあります。タイムスタンプ、一意のID、画像のサイズと乱数などを追加します。すべて表示できます こちら

まず、ホストされている画像フォルダに画像のファイル名が存在するかどうかを確認します。それ以外の場合はアップロードします。 whileループは、画像ファイル名が存在するかどうかを確認し、次に示すように一意のIDを追加します...

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);

}

もっと画像をチェック 名前変更の戦術

1
Daniel Nyamasyo