Как проверить, существует ли имя файла, переименовать файл?
например, я загружаю изображение 1086_002.jpg
если файл существует, переименуйте файл как 1086_0021.jpg
и сохраните, если 1086_0021.jpg
существует, переименуйте 1086_00211.jpg
и сохраните, если 1086_00211.jpg
существует, переименуйте 1086_002111.jpg
и сохранить …
Вот мой код, он может делать только в том случае, если 1086_002.jpg
существует, переименуйте файл как 1086_0021.jpg
, возможно, должен сделать foreach, но как?
//$fullpath = 'images/1086_002.jpg'; if(file_exists($fullpath)) { $newpieces = explode(".", $fullpath); $frontpath = str_replace('.'.end($newpieces),'',$fullpath); $newpath = $frontpath.'1.'.end($newpieces); } file_put_contents($newpath, file_get_contents($_POST['upload']));
Попробуйте что-нибудь вроде:
$fullpath = 'images/1086_002.jpg'; $additional = '1'; while (file_exists($fullpath)) { $info = pathinfo($fullpath); $fullpath = $info['dirname'] . '/' . $info['filename'] . $additional . '.' . $info['extension']; }
Почему бы просто не добавить временную метку на имя файла? Тогда вам не придется беспокоиться о произвольно длинных именах файлов для файлов, которые были загружены много раз.
надеюсь, это поможет
$fullPath = "images/1086_002.jpg" ; $fileInfo = pathinfo($fullPath); list($prifix, $surfix) = explode("_",$fileInfo['filename']); $x = intval($surfix); $newFile = $fileInfo['dirname'] . DIRECTORY_SEPARATOR . $prifix. "_" . str_pad($x, 2,"0",STR_PAD_LEFT) . $fileInfo['extension']; while(file_exists($newFile)) { $x++; $newFile = $fileInfo['dirname'] . DIRECTORY_SEPARATOR . $prifix. "_" . str_pad($x, 2,"0",STR_PAD_LEFT) . $fileInfo['extension']; } file_put_contents($newFile, file_get_contents($_POST['upload']));
Надеюсь, это поможет
благодаря
🙂
Я чувствую, что это будет лучше. Это поможет отслеживать, сколько раз загружался файл с тем же именем. Он работает так же, как Windows OS переименовывает файлы, если находит одно с тем же именем.
Как это работает: Если в медиакаталоге есть файл с именем 002.jpg, и вы пытаетесь загрузить файл с тем же именем, он будет сохранен как 002 (1) .jpg Другая попытка загрузить тот же файл сохранит новый файл как 002 (2) .jpg
Надеюсь, поможет.
$uploaded_filename_with_ext = $_FILES['uploaded_image']['name']; $fullpath = 'media/' . $uploaded_filename_with_ext; $file_info = pathinfo($fullpath); $uploaded_filename = $file_info['filename']; $count = 1; while (file_exists($fullpath)) { $info = pathinfo($fullpath); $fullpath = $info['dirname'] . '/' . $uploaded_filename . '(' . $count++ . ')' . '.' . $info['extension']; } $image->save($fullpath);
Вы можете изменить оператор if
на цикл while:
$newpath = $fullpath; while(file_exists($newpath)) { $newpieces = explode(".", $fullpath); $frontpath = str_replace('.'.end($newpieces),'',$fullpath); $newpath = $frontpath.'1.'.end($newpieces); } file_put_contents($newpath, file_get_contents($_POST['upload']));