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;
?>

Anuncios

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

  1. Excelente codigo, pero tengo nada mas una modificación cuando quieres subir un archivo con extension
    .pptx
    .docx
    que tenga ya sea mas de 4 o tenga la cantidad de extension que tenga usaria esto.

    ANTERIOR:

    $extFile = substr($fileName,-4,4);
    $fileName = substr($fileName,0,-4);

    NUEVO:

    $extFile = substr($fileName, strrpos($fileName, ‘.’));
    $countExtFile = strlen($extFile);
    $fileName = substr($fileName, 0, -$countExtFile);

    Este nos dara siempre la extension tenga de 1,2,3,4…..10 del tamaño que sea.
    Lo digo mas que nada por las que tienen de 3 a 4

    Saludos.!!!

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