Evitar la sobre escritura de archivos cargados con php

Pues aquí dejo un segmento de código que me parece algo sencillo pero puede ser útil a otros (además de que no compromete la confidencialidad de mis proyectos laborales) y sirve únicamente para renombrar un archivo que se sube por formulario web para evitar la sobrescritura; eso se hace agregando una serie numérica entre el nombre del archivo y su extensión:

<?php
/**
* @author Javier B. Camacho Martínez
* @copyright DGB - Agosto 2009
*/

$fileSize = $_FILES['fileUploaded']['size'];
$fileName= $_FILES['fileUploaded']['name'];
$fileType = $_FILES['fileUploaded']['type'];
$fileTmp
= $_FILES['fileUploaded']['tmp_name'];

// Reemplazar espacios y signos de puntación del nombre de archivo por guiones bajos
$fileName
= preg_replace('/[^a-z0-9-_\-\.]/i','_',$fileName);

// Obtener la extensión del archivo (a veces resulta útil saberlo)
$extFile
= substr($fileName,-4,4); // mantiene desde -4 a 4 caracteres: .txt

// Obtener el puro nombre del archivo (sin la extensión)
$fileName
= substr($fileName,0,-4); // mantiene desde 0 hasta -4 caracteres: carta_a_los_reyes_magos
$uploadsFolder
= './uploads/';

// Si no existe el directorio para almacenar los archivos, crearlo con permisos 777
!
is_dir($uploadsFolder) ? mkdir($uploadsFolder,0777) : null;

// Antes de mover el archivo al directorio, prevenir la sobre escritura
if(
file_exists($uploadsFolder.$fileName.$extFile)){
$counter = 1;
while(@
file_exists($uploadsFolder.$fileName.'_'.$counter.$extFile)) { $counter++;  }
// Si existe se renombra a con un infijo numérico: carta_a_los_reyes_magos_2.txt
$fileName = $fileName.'_'.$counter.$extFile;
}
// Si no existe, no se renombra y queda tal cual: carta_a_los_reyes_magos.txt

else{

$fileName
= $fileName.$extFile;
}

// Mover el archivo a su nuevo hogar:
$statusMovedFile
= move_uploaded_file($fileTmp,$uploadsFolder.$fileName);

// Verificación final
echo
'el status es: '.$statusMovedFile;
?>

2 pensamientos en “Evitar la sobre escritura de archivos cargados con php

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s