subir sube seleccionar otro obtener nombre guardar con archivos archivo almacenar adjuntar php file-upload upload rename file-exists

sube - PHP Renombrar nombre de archivo si existe Número de anexar a fin



seleccionar archivo php (3)

Estoy tratando de cambiar el nombre del archivo de una imagen cuando se carga, si existe, diga si mi nombre de archivo es test.jpg y ya existe. Quiero cambiarle el nombre como test1.jpg y luego test2.jpg y así sucesivamente. Con el código que escribí, cambió el nombre de mi archivo como test1.jpg y luego test12.jpg Cualquier consejo sobre cómo solucionarlo sería genial, gracias!

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


Aquí hay una modificación menor que creo que debería hacer lo que quieras:

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


Hay varias formas de cambiar el nombre de una imagen en PHP antes de cargarla en el servidor. agregar la marca de tiempo, la identificación única, las dimensiones de la imagen más el número aleatorio, etc. Puedes verlos todos here

Primero, compruebe si el nombre de archivo de la imagen existe en la carpeta de imágenes alojada, de lo contrario, cárguelo. El bucle while verifica si existe el nombre del archivo de imagen y agrega una identificación única como se muestra a continuación ...

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

Ver más here imagen


Inspirado en la respuesta de @Jason, creé una función que consideré formato de nombre de archivo más corto y más legible.

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"; }