Foros del Web » Programando para Internet » PHP »

Upload de Archivos

Estas en el tema de Upload de Archivos en el foro de PHP en Foros del Web. Hola! Tengo una pequeña duda, para validar archivos se usa algo distinto que con imagenes? Es que el código que estoy usando me valida bien ...
  #1 (permalink)  
Antiguo 02/01/2010, 06:16
 
Fecha de Ingreso: julio-2009
Mensajes: 157
Antigüedad: 14 años, 9 meses
Puntos: 2
Upload de Archivos

Hola!

Tengo una pequeña duda, para validar archivos se usa algo distinto que con imagenes?

Es que el código que estoy usando me valida bien imagines pero no me valida bien que sea .doc o .txt por ejemplo...

Os pego el código:

Código:
<?php 

$status = "";

if ($_POST["action"] == "upload") {

	// obtenemos los datos del archivo 

	$tamano = $_FILES["archivo"]['size'];

	$tipo = $_FILES["archivo"]['type'];

	$archivo = $_FILES["archivo"]['name'];

	$prefijo = substr(md5(uniqid(rand())),0,6);


if (!((strpos($tipo_archivo, "doc") || strpos($tipo_archivo, "pdf")) && ($tamano < 9000000000))) {
    echo "La extensi&oacute;n o el tama&ntilde;o de los archivos no es correcta. <br><br><table><tr><td><li>Se permiten archivos .doc , .pdf , .odt o .txt <br><li>se permiten archivos de 100 Kb máximo.</td></tr></table>";
}else{

	if ($archivo != "") {

		// guardamos el archivo a la carpeta files

		$destino =  "files/".$prefijo."_".$archivo;

		if (copy($_FILES['archivo']['tmp_name'],$destino)) {

			$status = "Archivo subido: <b>".$archivo."</b>";

		} else {

			$status = "Error al subir el archivo";

		}

	} else {

		$status = "Error al subir archivo";

	}

}
}

?>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>PHP upload - unijimpe</title>

<link href="estilo.css" rel="stylesheet" type="text/css" />

</head>

<body>

<table width="413" border="0" cellspacing="0" cellpadding="0">

  <tr>

    <td width="413" height="40" class="titulo">PHP upload - unijimpe </td>

  </tr>

  <tr>

    <td class="text">Por favor seleccione el archivo a subir:</td>

  </tr>

  <tr>

  <form action="upload.php" method="post" enctype="multipart/form-data">

    <td class="text">

      <input name="archivo" type="file" class="casilla" id="archivo" size="35" />

      <input name="enviar" type="submit" class="boton" id="enviar" value="Upload File" />

	  <input name="action" type="hidden" value="upload" />	  </td>

	</form>

  </tr>

  <tr>

    <td class="text" style="color:#990000"><?php echo $status; ?></td>

  </tr>

  <tr>

    <td height="30" class="subtitulo">Listado de Archivos Subidos </td>

  </tr>

  <tr>

    <td class="infsub">

	<?php 

	if ($gestor = opendir('files')) {

		echo "<ul>";

	    while (false !== ($arch = readdir($gestor))) {

		   if ($arch != "." && $arch != "..") {

			   echo "<li><a href=\"files/".$arch."\" class=\"linkli\">".$arch."</a></li>\n";

		   }

	    }

	    closedir($gestor);

		echo "</ul>";

	}

	?>	</td>

  </tr>

</table>

</body>

</html>
  #2 (permalink)  
Antiguo 02/01/2010, 06:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Upload de Archivos

lo que haces, es validar la extensión o MIME de un archivo... no validas el archivo realmente

me refiero a que, es exactamente igual... finalmente se trata de archivos (sean imágenes, texto, pdf, etc...)

te sugiero, antes de comprobar $tipo_archivo imprime su valor.. así puedes analizar de que se trata el problema, en lugar de hacerlo con los ojos vendados...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 02/01/2010, 06:31
 
Fecha de Ingreso: julio-2009
Mensajes: 157
Antigüedad: 14 años, 9 meses
Puntos: 2
Estoy tonto, era un problema de variables (el nombre)

PEro bueno, he puesto:

Lo que coge es application/msword

y tengo que valide que sea .doc..

Por tanto claro, sigue sin funcionar

Lo único que coge bien es el pdf.

Los demas pone

para el .odt = application/vnd.oasis.opendocument.text
para el .doc= application/msword
y para el .txt= text/plain

Última edición por GatorV; 03/01/2010 a las 01:26
  #4 (permalink)  
Antiguo 02/01/2010, 07:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Upload de Archivos

precisamente en base a eso debes hacer tus comparaciones, que si reflexionas... no estas usando jamás la extensión del archivo, únicamente usas el MIME

por lo tanto tus comparaciones deben basarse en ello...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 02/01/2010, 07:16
 
Fecha de Ingreso: julio-2009
Mensajes: 157
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Upload de Archivos

He probado también a poner

if (!((strpos($tipo, "application/msword" ) || strpos($tipo, "pdf") || strpos($tipo, "application/vnd.oasis.opendocument.text") || strpos($tipo, "text/plain") ) && ($tamano < 9000000000))) {

y tampoco funciona
  #6 (permalink)  
Antiguo 02/01/2010, 07:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Upload de Archivos

por favor, lee el manual al respecto de strpos()
http://php.net/strpos

dicha función devuelve 0 si la cadena esta al comienzo, osea... que un cero es un booleano false
Código PHP:
echo strpos('abc''a'); // da 0 (cero) 
por ende, tus comparaciones aunque correctas lógicamente, son erradas...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 02/01/2010, 07:33
 
Fecha de Ingreso: julio-2009
Mensajes: 157
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Upload de Archivos

Efectivamente, tienes toda la razón del mundo. Gracias

Ya esta solucionado!

Etiquetas: upload
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:52.