Я пытаюсь переименовать имя файла изображения, когда он загружен, если он существует, скажем, если мое имя файла 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++; }
в$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++; }
в$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); }
в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); }
Проверьте правильность переименования изображений