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