Foros del Web » Programando para Internet » PHP »

Obtener tipo de archivo al hacer un upload.

Estas en el tema de Obtener tipo de archivo al hacer un upload. en el foro de PHP en Foros del Web. Bien, estoy implementando un upload con un ejemplo muy comentado en algun otro post... y obtengo el tipo de arhivo asi: $tipo_archivo = $HTTP_POST_FILES['userfile']['type']; Pero ...
  #1 (permalink)  
Antiguo 31/10/2006, 13:01
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Obtener tipo de archivo al hacer un upload.

Bien, estoy implementando un upload con un ejemplo muy comentado en algun otro post... y obtengo el tipo de arhivo asi:

$tipo_archivo = $HTTP_POST_FILES['userfile']['type'];


Pero he leido en un tutorial que tiene que ser el navegador el que proporciona esta imformacion??

Mi problema está en que quiero aceptar la subida de archivos con extension ".WAGAMe" que son unos replays de un juego... y el script no me acepta este tipo de fichero.

Como podria solucionar este error?

Gracias.
  #2 (permalink)  
Antiguo 31/10/2006, 13:11
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Lo que yo hize en alguna ocasion fue lo siguiente

Código PHP:
$nombre $_FILES['archivo']['name'];

$tipo explode("."$nombre);

if(
$tipo[1] == "WAGAMe")
{
.
.
.
}
else
{
   echo 
"Error, esta extensión no es permitida":

}

No es uina solución elegante pero me ha sacado del apuro en varias ocasiones.

Saludillos.
  #3 (permalink)  
Antiguo 31/10/2006, 13:32
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Muchas gracias mauled, ya funciona.

Por curiosidad... sabes hasta que punto es este método, fiable? Presenta algun tipo de bug o algo??

Gracias!


EDIT:

Es normal que me deje subir arhivos de texto?? en teoria no no??

if (($tipo[1] == "png" || $tipo[1] == "wagame") && ($tamano_archivo < 999999)) {
  #4 (permalink)  
Antiguo 31/10/2006, 13:38
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Es muy fiable. dijo no es muy elegante la progrmación pero funciona.

¿Tuviste algun problema?

Saludillos
  #5 (permalink)  
Antiguo 31/10/2006, 13:42
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Y si le pongo un file con el nombre: mi.archivo.de.algo.jpg ? En todo caso usa esto es un poco mas "elegante":
$extension = strtolower(strrchr($_FILES['archivo']['name'],'.')); #Te dará .wagame
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #6 (permalink)  
Antiguo 31/10/2006, 13:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Y .. seguro que en $_FILES['archivo']['type'] no se obtiene nada?

Que pasa si te subo un "renombrado" .exe a .wagame ?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 31/10/2006, 14:17
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Buenas, muchas gracias nicolaspar, ahora ya solo puedo subir en funcion de la extension... lo que sea. ".Wagame, .png..." :)

Cluster, de la otra manera: $_FILES['archivo']['type']... la extension wagame no me la reconocia :S

Salu2
  #8 (permalink)  
Antiguo 31/10/2006, 14:26
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Por lo que tengo entendido 'type' te lee los headers del archivo, nada que ver con la extensión, por lo que si el file wagame no tiene definidos dichos headers php no lo leerá.
Lo que dice cluster sobre el exe es así, tenes que tener cuidado con eso, lo mismo con código malicioso dentro del mismo wagame.
Que te da en pantalla un echo $_FILES['archivo']['type']? (porque tal vez te de algo como wgame (por decir algo a manera de ejemplo) ).
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #9 (permalink)  
Antiguo 31/10/2006, 14:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Lo más problable que el servidor tenga que reconocer ese formato MIME.

Algo de teoría al respecto:
http://www.php.net/manual/es/ref.mime-magic.php
http://www.ignside.net/man/servidores/mimetypes.php

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 31/10/2006, 14:52
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Pues si hago un echo $_FILES['archivo']['type'] con un archivo wagame, lo reconoce como:

application/octet-stream

Nada que ver xD
  #11 (permalink)  
Antiguo 31/10/2006, 14:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Cita:
Iniciado por AbdelioR Ver Mensaje
Pues si hago un echo $_FILES['archivo']['type'] con un archivo wagame, lo reconoce como:

application/octet-stream

Nada que ver xD
Asi se reconocen los archvios que no se identifica su formato MIME por no ser "standard" tal vez.

Todo esto es parte del protocolo HTTP por si te les interesa ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 31/10/2006, 15:17
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 7 meses
Puntos: 8
Bueno este tema la verdad es que no mucho... utilizare el metodo que dijo nicolaspar que veo bien como funciona... y ya esta :p

gracias de nuevo.
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 16:16.