Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con $_FILES[]['type']

Estas en el tema de Problema con $_FILES[]['type'] en el foro de PHP en Foros del Web. Hola he visto que type que con el consigo la extensión de un archivo me dice que los exe, rar,zip,gmk y otros mas son application/octet-stream. ...
  #1 (permalink)  
Antiguo 05/01/2013, 05:37
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Problema con $_FILES[]['type']

Hola he visto que type que con el consigo la extensión de un archivo me dice que los exe, rar,zip,gmk y otros mas son application/octet-stream. Mi pregunta es como reconocer cual que extensión tiene si todos me los muestra igual??

Saludos
  #2 (permalink)  
Antiguo 05/01/2013, 05:57
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 4 meses
Puntos: 2114
Respuesta: Problema con $_FILES[]['type']

No es lo mismo extensión que tipo de archivo. Lógicamente la extensión estará en el nombre de archivo; $_FILES[]['name'].
  #3 (permalink)  
Antiguo 05/01/2013, 08:55
Avatar de rottenp4nx  
Fecha de Ingreso: octubre-2012
Ubicación: Santiago
Mensajes: 417
Antigüedad: 12 años, 2 meses
Puntos: 36
Respuesta: Problema con $_FILES[]['type']

Si quieres obtener la extensión fácilmente, puedes jugar con

pathinfo();

http://php.net/manual/es/function.pathinfo.php

Saludos
  #4 (permalink)  
Antiguo 05/01/2013, 10:04
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Problema con $_FILES[]['type']

Para comprobar el tipo de fichero, usa Fileinfo y para obtener la extensión usa la función pathinfo como te dijo rottenp4nx.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 05/01/2013, 17:10
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Problema con $_FILES[]['type']

rottenp4nx gracias por el link lo leio pero en path que quiere decir con: La ruta que se va a comprobar.

Tengo que poner $_FILES['nombre'] o que??

andresdzphp tambien gracias por el link lo vi pero pone que fileinfo no es axacto y que es por aproximación.
  #6 (permalink)  
Antiguo 05/01/2013, 17:23
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Problema con $_FILES[]['type']

leíste el final?

Cita:
Las funciones en este módulo tratan de averiguar el tipo de fichero y codificación buscando por ciertas mágicas secuencias de bytes en una posición específica en el fichero. Por lo que no es exacto pero aun siendo por aproximación, funciona muy bién.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 05/01/2013, 17:50
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Problema con $_FILES[]['type']

Cita:
Iniciado por andresdzphp Ver Mensaje
leíste el final?
Si pero igual dice que no siempre es exacto. Aunque tenga 99% de acierto también tiene 1% de fallo. Asi que puede ocurrir que me suban un archivo que no quiero en mi servidor y luego al intentar usar lo producir problemas(Hablo de la extension).

Y una cosa... si ya existe $_FILES[''] y sus arrays porque se crean otras funciones que hagan lo mismo o casi lo mismo?? Quiza me confundo.

Saludos
  #8 (permalink)  
Antiguo 05/01/2013, 17:51
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Problema con $_FILES[]['type']

Cita:
Iniciado por patilanz Ver Mensaje
Y una cosa... si ya existe $_FILES[''] y sus arrays porque se crean otras funciones que hagan lo mismo o casi lo mismo?? Quiza me confundo.
$_FILES tampoco es exacto y no todos los MIME tienen la extensión. Por eso te falla con todos estos: exe, rar,zip,gmk

Usando las funciones que te digo, mi resultado con un RAR es:

application/x-rar
extensión .rar

Prueba así, para la extensión:

Código PHP:
Ver original
  1. $filename = $_FILES["file"]["name"];
  2. $ext = pathinfo($filename);
  3. echo $ext['extension'];

Prueba este ejemplo, para que veas las diferencias:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $finfo = finfo_open(FILEINFO_MIME_TYPE);
  4. $filename_tmp = $_FILES["file"]["tmp_name"];
  5. $filename = $_FILES["file"]["name"];
  6. echo 'MIME con finfo_file: ' . finfo_file($finfo, $filename_tmp) . "<br />";
  7. $ext = pathinfo($filename);
  8. echo 'Extensión: ' . $ext['extension'] . "<br />";
  9. echo 'Type de $_FILES: ' . $_FILES["file"]["type"];
  10. finfo_close($finfo);

Cita:
MIME con finfo_file: application/x-rar
Extensión: rar
Type de $_FILES: application/octet-stream
Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 05/01/2013 a las 18:03 Razón: Ejemplo
  #9 (permalink)  
Antiguo 05/01/2013, 22:39
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Problema con $_FILES[]['type']

Cita:
Iniciado por patilanz Ver Mensaje
Y una cosa... si ya existe $_FILES[''] y sus arrays porque se crean otras funciones que hagan lo mismo o casi lo mismo?? Quiza me confundo.
El contenido de $_FILES (al igual que $_POST y $_GET) es proporcionado por el navegador, por lo tanto, es manipulable y, en el mejor de los casos, poco confiable, es por eso que debes validar.
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 06/01/2013, 04:04
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Problema con $_FILES[]['type']

Veo que es mejor usar pathinfo pero ahora si para por ejemplo un archivo: nombre.gif la extension te la da como gif y para un archivo rar te la da como : application/x-rar como obtengo la extension para poder guardar el archivo?

Antes lo obtenia con substr() y strpos() buscando esto: '/' pero ahora si me muestra resultados diferentes como se que tengo que buscar ??

Saludos
  #11 (permalink)  
Antiguo 06/01/2013, 11:05
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses
Puntos: 793
Respuesta: Problema con $_FILES[]['type']

Tienes que usar pathinfo para las extensiones.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #12 (permalink)  
Antiguo 06/01/2013, 12:53
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Problema con $_FILES[]['type']

Cita:
Iniciado por andresdzphp Ver Mensaje
Tienes que usar pathinfo para las extensiones.
Y pathinfo siempre te da el nombre de la extension o casi siempre. Quiero decir si en lo que te da viene lo del final del archivo .jpg .gif .rar .exe y no los muestra con otro nombre ??

Saludos
  #13 (permalink)  
Antiguo 06/01/2013, 12:59
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Problema con $_FILES[]['type']

La idea no es saber la extensión del archivo, sino saber el contenido que tiene ese archivo. Tu puedes usar la extensión y adentro del contenido colocar otro tipo de código. Por lo que usar fileinfo es lo recomendable. Si quieres usar solo la extensión, entonces te vas a encontrar con alguien que puede introducir código y solo cambió el contenido. Es más si va a usar solo imagenes para subir arcihvos entonces puedes usar GD para detectar con exactitud que tipo de imagen es la que sube, de lo contrario lo aconsejable es fileinfo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #14 (permalink)  
Antiguo 06/01/2013, 13:14
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Problema con $_FILES[]['type']

Cita:
Iniciado por abimaelrc Ver Mensaje
La idea no es saber la extensión del archivo, sino saber el contenido que tiene ese archivo. Tu puedes usar la extensión y adentro del contenido colocar otro tipo de código. Por lo que usar fileinfo es lo recomendable. Si quieres usar solo la extensión, entonces te vas a encontrar con alguien que puede introducir código y solo cambió el contenido. Es más si va a usar solo imagenes para subir arcihvos entonces puedes usar GD para detectar con exactitud que tipo de imagen es la que sube, de lo contrario lo aconsejable es fileinfo.
Esque necesito la extension porque uso esto ya que no se usar otra forma de guardar el archivo :

Código PHP:
Ver original
  1. $tipo=strtolower($_FILES['imagen_f']['type']);
  2. $extension=substr($tipo,strpos($tipo,'/')+1);
  3. $name=$_SESSION['user'].'-'.time().'.'.$extension;
  4. $lugar='../photos/game_image/';
  5. move_uploaded_file($_FILES['imagen_f']['tmp_name'],$lugar.$name);


Solo tengo que cambiar lo para pathinfo y funcionara perfecto o hago algo mal?
  #15 (permalink)  
Antiguo 06/01/2013, 13:38
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Problema con $_FILES[]['type']

Debes pensar en lo que te puedes enfrentar en un futuro. Ya tienes un código pero al parecer no quieres pasar trabajo para lo que te puedas encontrar más adelante. Luego vas a querer venir al foro preguntando como evitar que ataquen en tu sitio ya que hay alguien que ha introducido un código y no sabes porque. Bueno solo hago la observación para que pienses mejor como prepararte. No estoy diciendo que vas a saber como defenderte en todas, pero lo que sepas trata de aplicarlo. Solo es cuestión de ver como funciona las cosas y empezar a implementarlas. Te tardas un poco en lograrlo porque vas a empezar a estudiar, pero te vas a evitar dolores de cabeza en un futuro.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #16 (permalink)  
Antiguo 06/01/2013, 14:08
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Problema con $_FILES[]['type']

Cita:
Iniciado por abimaelrc Ver Mensaje
Debes pensar en lo que te puedes enfrentar en un futuro. Ya tienes un código pero al parecer no quieres pasar trabajo para lo que te puedas encontrar más adelante. Luego vas a querer venir al foro preguntando como evitar que ataquen en tu sitio ya que hay alguien que ha introducido un código y no sabes porque. Bueno solo hago la observación para que pienses mejor como prepararte. No estoy diciendo que vas a saber como defenderte en todas, pero lo que sepas trata de aplicarlo. Solo es cuestión de ver como funciona las cosas y empezar a implementarlas. Te tardas un poco en lograrlo porque vas a empezar a estudiar, pero te vas a evitar dolores de cabeza en un futuro.
Gracias pero nadie me ha dicho como hacer lo mas seguro ni cual de las formas que me presentasteis es mejor para la seguridad. Yo hago todo lo posible para que mi sitio sea seguro. Uso lo que sepa hasta ahora y si aprendo una cosa nueva la agrego.
  #17 (permalink)  
Antiguo 06/01/2013, 14:36
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Problema con $_FILES[]['type']

En el ejemplo #1 de la página del manual que sugirió rottenp4nx está muy claro como obtener la extensión: http://php.net/manual/es/function.pa...p#example-2345

Después sólo comparas la extensión con el tipo de archivo (usando Fileinfo) y, si no corresponde, no es seguro!
__________________
- León, Guanajuato
- GV-Foto
  #18 (permalink)  
Antiguo 07/01/2013, 05:01
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Problema con $_FILES[]['type']

Cita:
Iniciado por Triby Ver Mensaje
En el ejemplo #1 de la página del manual que sugirió rottenp4nx está muy claro como obtener la extensión: [url]http://php.net/manual/es/function.pathinfo.php#example-2345[/url]

Después sólo comparas la extensión con el tipo de archivo (usando Fileinfo) y, si no corresponde, no es seguro!
Hola conseguir conseguir la extension pero el tipo es muy diferente a ella como entonces van a ser igual cuando es seguro?

Por ejemplo para un archivo .exe la extension me la da bien exe pero el tipo application/x-msdownload

No son iguales.
La extension con pathinfo y el tipo con $_FILES['nombre']['type'] o no??

Me pueden dar un ejemplo de como hacerlo?

Última edición por patilanz; 07/01/2013 a las 10:29
  #19 (permalink)  
Antiguo 07/01/2013, 21:57
 
Fecha de Ingreso: marzo-2012
Mensajes: 84
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: Problema con $_FILES[]['type']

Prueba esto, modifica el código, a mí me funciona perfectamente:

Código PHP:
$extensiones = array("application/vnd.openxmlformats-officedocument.wordprocessingml.document"=>"docx","application/pdf"=>"pdf","image/jpeg"=>"jpg""application/rar"=>"rar""application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"=>"xlsx""text/plain"=>"txt""application/vnd.ms-powerpoint"=>"ppt");

$CODI=$_REQUEST["codi"];

$res mysql_query("SELECT ID_ARTICULOS,EMAIL_PROF,TITULO,NOMBRE_ARCHIVO,DESCRIPCION,CONTENIDO,TAMANIO,TAMANIO_UNIDAD,TIPO,LINK FROM ml_dat_ARTICULOS WHERE ID_ARTICULOS='".$CODI."' ");

$tipo mysql_result($res0"TIPO");
$contenido mysql_result($res0"CONTENIDO");
$nombre mysql_result($res0"TITULO");


header("Content-type:'".$tipo."'");
header('Content-disposition: attachment; filename="'.$nombre.'.'.$extensiones[$tipo].'"'); 

echo 
$contenido


mysql_close(); 
  #20 (permalink)  
Antiguo 08/01/2013, 08:12
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 11 meses
Puntos: 29
Respuesta: Problema con $_FILES[]['type']

Cita:
Iniciado por chubse Ver Mensaje
Prueba esto, modifica el código, a mí me funciona perfectamente:

Código PHP:
$extensiones = array("application/vnd.openxmlformats-officedocument.wordprocessingml.document"=>"docx","application/pdf"=>"pdf","image/jpeg"=>"jpg""application/rar"=>"rar""application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"=>"xlsx""text/plain"=>"txt""application/vnd.ms-powerpoint"=>"ppt");

$CODI=$_REQUEST["codi"];

$res mysql_query("SELECT ID_ARTICULOS,EMAIL_PROF,TITULO,NOMBRE_ARCHIVO,DESCRIPCION,CONTENIDO,TAMANIO,TAMANIO_UNIDAD,TIPO,LINK FROM ml_dat_ARTICULOS WHERE ID_ARTICULOS='".$CODI."' ");

$tipo mysql_result($res0"TIPO");
$contenido mysql_result($res0"CONTENIDO");
$nombre mysql_result($res0"TITULO");


header("Content-type:'".$tipo."'");
header('Content-disposition: attachment; filename="'.$nombre.'.'.$extensiones[$tipo].'"'); 

echo 
$contenido


mysql_close(); 

No veo relación con lo que pido
Gracias de todas formas.
  #21 (permalink)  
Antiguo 08/01/2013, 09:11
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 10 meses
Puntos: 43
Respuesta: Problema con $_FILES[]['type']

Buenas

http://php.net/manual/es/function.finfo-file.php

Saludos
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..

Etiquetas: $_files, extension, 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 10:09.