画像のファイル名が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++;
}
ここにあなたが望むことをするべきだと思うマイナーな修正があります:
$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で画像の名前を変更する方法はいくつかあります。タイムスタンプ、一意の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);
}
もっと画像をチェック 名前変更の戦術