PHP - Subir archivos y evitar duplicados en el servidor

 
Vista:
sin imagen de perfil

Subir archivos y evitar duplicados en el servidor

Publicado por Sebastian (35 intervenciones) el 02/01/2016 05:39:30
Saludos, espero me puedan ayudar. Mi duda es la siguiente:

Estoy subiendo archivos .pdf a una carpeta del servidor (1 a la vez), he comprobado que al momento de subir archivos con nombres idénticos estos se reemplazan y solo permanece el ultimo subido.

Como puedo evitar esto y mantener ambos archivos en el servidor.

Existe alguna manera de renombrarlos solo al momento de guardar?. Estuve investigando algo sobre agregarles id unicos, pero no me quedo muy claro.

Este es el codigo que utilizo para subir los archivos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 # definimos la carpeta destino
    $carpetaDestino="actas/";
 # si hay algun archivo que subir
    if($_FILES["archivo"]["name"][0])
    {
        # recorremos todos los arhivos que se han subido
        for($i=0;$i<count($_FILES["archivo"]["name"]);$i++)
        {
       if ($_FILES["archivo"]["type"][$i] <= 1000000)
	{
           # si es un formato de imagen
           if($_FILES["archivo"]["type"][$i]=="application/pdf")
          {
           # si exsite la carpeta o se ha creado
         if(file_exists($carpetaDestino) || @mkdir($carpetaDestino))
            {
        $origen=$_FILES["archivo"]["tmp_name"][$i];
        $destino=$carpetaDestino.$_FILES["archivo"]["name"][$i];
	# SI YA EXISTE UN ARCHIVO PRIMERO LO BORRAMOS
 
	mysql_select_db($database_prueba, $prueba);
	$query_Recordset2 = "
       SELECT actas_convocatoriaruta FROM actas_areasacademicas WHERE actasid='".$_GET['actasid']."'";
      	$Recordset2 = mysql_query($query_Recordset2, $prueba) or die(mysql_error());
       $row_Recordset2 = mysql_fetch_assoc($Recordset2);
	$totalRows_Recordset2 = mysql_num_rows($Recordset2);
	$ruta = $row_Recordset2['actas_convocatoriaruta'];
	if  (isset($ruta))
	{
         	unlink($ruta);
	}
	# movemos el archivo
            if(@move_uploaded_file($origen, $destino))
              {
                //Envio de informacion via mail
              }else{
            echo "<br>No se ha podido mover el archivo: ".$_FILES["archivo"]["name"][$i];
              }
                 }else{
                  echo "<br>No se ha podido crear la carpeta: up/".$user;
                     }
                }else{
               ?>
                	<script>
	               window.alert("Solo se permite archivos .pdf y el tamaño no debe exeder 1MB");
                  	//location.href = "../permisosrecibidosleidos.php";
                      //window.location="../subirconvocatorias.php"; 
	            	</script>
	        <?php
                                  }
                              	}
	                      }

Espero contar con su ayuda. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Subir archivos y evitar duplicados en el servidor

Publicado por Víctor (1 intervención) el 02/01/2016 12:13:16
Puedes concatenarle al nombre del fichero el string que devuelve la función time(), así siempre se llamarán de forma diferente.

Saludos.

http://victorroblesweb.es
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Subir archivos y evitar duplicados en el servidor

Publicado por Sebastian (35 intervenciones) el 02/01/2016 21:31:03
Muchas gracias por tu respuesta.

Voy a probar esa solución a ver que resultados obtengo.

Saludos..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Subir archivos y evitar duplicados en el servidor

Publicado por Sebastian (35 intervenciones) el 02/01/2016 22:13:19
He logrado concatenar al "name" del archivo algo que lo haga diferente.

Ahora, además de guardar el archivo en el servidor, también guardo la url del archivo en una tabla de mi base de datos para que los usuarios puedan acceder y descargarse dicho archivo.

Necesito que los usuario se descargen los archivos con el nombre original que ellos subieron. (Sin concatenar nada)

Este es el código que utilizo para descargar los archivos. Hago un select al campo que contiene la ruta del archivo para poder manejarlo, pero obtengo el nombre concatenado y deseo el original.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$actasid = $_GET['actasid'];
 
 
	mysql_select_db($database_prueba, $prueba);
	$query_Recordset1 = "SELECT actas_convocatoriaruta FROM actas_areasacademicas
        WHERE actasid ='".$actasid."'";
	$Recordset1 = mysql_query($query_Recordset1, $prueba) or die(mysql_error());
	$row_Recordset1 = mysql_fetch_assoc($Recordset1);
	$totalRows_Recordset1 = mysql_num_rows($Recordset1);
 
              $archivo = basename($row_Recordset1['actas_convocatoriaruta']);
 
		$ruta = '../actas/'.$archivo;
 
		if (is_file($ruta))
		{
		   header('Content-Type: application/force-download');
		   header('Content-Disposition: attachment; filename='.$archivo);
		   header('Content-Transfer-Encoding: binary');
		   header('Content-Length: '.filesize($ruta));
 
		   readfile($ruta);
		}
		else
		 ?>
	                <script>
			window.alert("Aún no se ha subido la convocatoria");
			//location.href = "../permisosrecibidosleidos.php";
			window.history.back();
			</script>
			<?php

Como puedo dar solución a este problema.

Espero contar con su ayuda. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar