Имя файла проверки php существует, переименуйте файл

Как проверить, существует ли имя файла, переименовать файл?

например, я загружаю изображение 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']));