Foros del Web » Programando para Internet » PHP »

Problema con formatos MIME (...o similar)

Estas en el tema de Problema con formatos MIME (...o similar) en el foro de PHP en Foros del Web. Hola a todos/as de nuevo: Hacia dias que no ponía ningún problema. Estoy adaptando un código de un proyecto (mi primer proyecto) para que la ...
  #1 (permalink)  
Antiguo 18/07/2011, 23:42
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Problema con formatos MIME (...o similar)

Hola a todos/as de nuevo:

Hacia dias que no ponía ningún problema. Estoy adaptando un código de un proyecto (mi primer proyecto) para que la recogida de una imagen sirva para documentos tipo doc, xls, pdf, etc.
Según he consultado por la web el tema es muy sencillo solo hay que indicar el tipo de documento et Voilá!, pero como era de esperar me han sugido dos problemas, uno con el formato admitido que me devuelve el siguiente error:

Cita:
"El archivo no está en el formato adecuado solo se admite DOC, XLS, PPT, PDF, ZIP y RAR"
que circunstancialmente coincide con la primera restricción que tengo en el código, que es este:

Código PHP:
//Compruebo el tipo de fichero del Documento
    
    
$mime_archivo=($_FILES['file']['type']);  
    
$mimes_aceptados=array('file/pdf','file/doc','file/rar','file/xls','file/zip','file/ppt');  
            if (!
in_array($mime_archivo,$mimes_aceptados)) 
            {echo 
"<script type=\"text/javascript\">alert(\"El archivo no está en el formato adecuado solo se admite DOC, XLS, PPT, PDF, ZIP y RAR\");   
            window.history.back();  
            </script>"
;  
            exit;}  

//Compruebo el tamaño del fichero  

            
if($_FILES['file']['size']>5000000
            {echo 
"<script type=\"text/javascript\">alert(\"El tamaño no es correcto deber ser inferior a 1MB\");  
            window.history.back();  
            </script>"
;  
            exit;}  

//Compruebo que no se produzcan errores  

            
if($_FILES['file']['error']!=0
            {echo 
"<script type=\"text/javascript\">alert(\"Error al copiar el archivo\");  
            window.history.back();  
            </script>"
;  
            exit; }  

//defino donde guardo las imagenes  

    
$RutaDoc "../img/ImgNews/{$_FILES['file'][name]}";  

            if(!
copy($_FILES['file']['tmp_name'], $rutaDoc)) 
            {echo 
"<script type=\"text/javascript\">alert(\"Error al copiar el archivo\");  
            window.history.back();  
            </script>"
;   
            exit;} 
El otro problema es que no sé como permitir en el proceso del formulario que el campo esté vacio.

¿Alguien sabe como resolver estos inconvenientes? de los dos el más gordo para mi es el tema del formato de archivo.

Agradeciendo de antemano la ayuda, un cordial saludo a todos/as
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #2 (permalink)  
Antiguo 19/07/2011, 03:36
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problema con formatos MIME (...o similar)

Añade justo antes del código que has puesto un var_dump($_FILES['file']); para que veamos qué nos viene en la variable. Igual estás pensando que te llega bien y no es así.

De ahí seguimos, un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 20/07/2011, 02:51
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Problema con formatos MIME (...o similar)

Hola:

En primer lugar muchas gracias por tu ayuda. Puse lo que me indicaste y me devuelve el siguiente mensaje:

Cita:
array(5) {["name"]=>string(48)"archivo.xls" ["type"]=> string(24) "application/vnd.ms-excel" ["tmp_name"]=> string(24) "C:\xampp\tmp\php4776.tmp" ["error"]=> int(0) ["size"]=> int(84480)}
Para mi es como chino ¿Tu sabes que indica?

Muchas gracias,
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #4 (permalink)  
Antiguo 20/07/2011, 03:37
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problema con formatos MIME (...o similar)

Bueno, ahí ves claramente lo que sucede:

Código PHP:
    $mime_archivo=($_FILES['file']['type']);  
    
$mimes_aceptados=array('file/pdf','file/doc','file/rar','file/xls','file/zip','file/ppt');  
            if (!
in_array($mime_archivo,$mimes_aceptados)) 
1. En $_FILES['file']['type'] tienes lo que has visto impreso: ["type"]=> string(24) "application/vnd.ms-excel". Este valor lo pasas a $mime_archivo.
2. Luego tienes un array $mimes_aceptados con los valores que se ven ahí.
3. Por último tienes una comprobación si $mime_archivo está dentro del array $mimes_aceptados.

Contesta tú mismo: application/vnd.ms-excel está dentro de array('file/pdf','file/doc','file/rar','file/xls','file/zip','file/ppt')?

Un saludo.

PD: cuando pones un var_dump de un array se te muestra siempre con el siguiente formato:
array(tamaño_array) {["campo_1"]=>tipo_dato_1(tamaño_contenido_1)"contenido_1", ["campo_2"]=>tipo_dato_2(tamaño_contenido_2)"contenido_2"... }
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?

Última edición por vgonga1986; 20/07/2011 a las 03:42 Razón: Añadir PD
  #5 (permalink)  
Antiguo 20/07/2011, 08:38
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Problema con formatos MIME (...o similar)

Hola:

Disculpa que sea tan obtuso ¿quieres decir que debo añadir application/vnd.ms-excel al array $mimes_aceptados? entonces ¿debo cambiar la redacción del array y poner un application/vnd.**** para cada tipo de documento admitido?

Disculpa de nuevo y gracias otra vez,
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #6 (permalink)  
Antiguo 20/07/2011, 08:41
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problema con formatos MIME (...o similar)

Exacto, ese array no te sirve para lo que pretendes, pues los type que has puesto en el array no son los que te van a salir.

Yo que tú, ahora que tienes el trozo que te muestra el type, subiría un fichero de cada tipo que vayas a querer permitir y modificaría el array con los type que te vayan saliendo.

Espero que te sirva de ayuda, un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #7 (permalink)  
Antiguo 21/07/2011, 02:51
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Problema con formatos MIME (...o similar)

Hola de nuevo:

Insisto en lo del agradecimiento por tu ayuda. Pero estoy espeso o soy tonto (o las dos).
Llevo tres horas peleando con el maldito array y no funciona. He probado asi:

Código PHP:
//Si el campo está vacio pongo una predefinida

    
$mime_archivo=($_FILES['imagen']['type']);  
    
$mimes_aceptados=array('file/doc,'file/xls',file/pdf','application/vnd.ms-excel');  
            if (!
in_array($mime_archivo,$mimes_aceptados)) 
            {echo 
"<script type=\"text/javascript\">alert(\"La imagen no está en el formato adecuado solo se admite jpeg, jpg, png y gif\");   
            window.history.back();  
            </script>"
;  
            exit;} 
y devuelve el error, lo he cambiado por esto:

Código PHP:
//Si el campo está vacio pongo una predefinida

    
$mime_archivo=($_FILES['imagen']['type']);  
    
$mimes_aceptados=array(,'application/vnd.ms-excel');  
            if (!
in_array($mime_archivo,$mimes_aceptados)) 
            {echo 
"<script type=\"text/javascript\">alert(\"La imagen no está en el formato adecuado solo se admite jpeg, jpg, png y gif\");   
            window.history.back();  
            </script>"
;  
            exit;} 
tampoco funciona, lo he cambiado por esto otro:
Código PHP:
//Si el campo está vacio pongo una predefinida

    
$mime_archivo=($_FILES['imagen']['type']);  
    
$mimes_aceptados=array('file'/vnd.ms-excel);  
            if (!
in_array($mime_archivo,$mimes_aceptados)) 
            {echo 
"<script type=\"text/javascript\">alert(\"La imagen no está en el formato adecuado solo se admite jpeg, jpg, png y gif\");   
            window.history.back();  
            </script>"
;  
            exit;} 
Tampoco va, lo vuelto a cambiar:

Código PHP:
//Si el campo está vacio pongo una predefinida

    
$mime_archivo=($_FILES['imagen']['type']);  
    
$mimes_aceptados=array('file/application/vnd.ms-excel');  
            if (!
in_array($mime_archivo,$mimes_aceptados)) 
            {echo 
"<script type=\"text/javascript\">alert(\"La imagen no está en el formato adecuado solo se admite jpeg, jpg, png y gif\");   
            window.history.back();  
            </script>"
;  
            exit;} 
Y sigue sin funcionar y así varias otras posibilidades
Esta claro que hoy no es mi dia. Por favor ¿Serias tan amable de ponerme la redacción correcta?

Muchas gracias,
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #8 (permalink)  
Antiguo 21/07/2011, 04:14
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problema con formatos MIME (...o similar)

Madre mía, las cosas que has probado...

Es tan simple como esto:
Código PHP:
    $mime_archivo=($_FILES['file']['type']);  
    
$mimes_aceptados=array('application/vnd.ms-excel');  
            if (!
in_array($mime_archivo,$mimes_aceptados)) 
Además, no entiendo por qué has cambiado de $_FILES['file']['type'] a $_FILES['imagen']['type'], si tu campo del form es file, no? No tiene ningún sentido eso.

En el primer ejemplo te falta un ', en el segundo te sobra una ",", en el tercero las comillas simples están mal puestas y en el último te sobra un file/. Sin ánimo de ofender, pero viendo las cosas que se te ocurren, podrías haber estado siglos. Te recomiendo encarecidamente que mires manuales, sobre todo de como construir arrays.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #9 (permalink)  
Antiguo 22/07/2011, 02:12
Avatar de Rankxerox1984  
Fecha de Ingreso: septiembre-2010
Mensajes: 253
Antigüedad: 13 años, 7 meses
Puntos: 4
Respuesta: Problema con formatos MIME (...o similar)

Hola de nuevo,

Muchas gracias por tu ayuda. Antes que nada, el código de este Upload lo tenia para subir imágenes y funciona bien (de ahí los cambios que has visto por las pruebas). Todos los líos vienen de querelo adaptar para subir ficheros "normales".
He probado lo que me has dicho y ahora además del error

Cita:
array(5) {["name"]=>string(10)"archivo.xls" ["type"]=> string(24) "application/vnd.ms-excel" ["tmp_name"]=> string(23) "C:\xampp\tmp\php4776.tmp" ["error"]=> int(0) ["size"]=> int(33280)}
Aparece

Cita:
Warning: copy()[function.copy]:Filename cannot be empty in C:\xampp\htdocs\checkPerfilEMP.php on line 202
(lo consideraré un progreso)

Como no veo que funciona mal (en la versión para imagenes no daba problemas) y por partes no vamos a terminar nunca, te pongo el código detodo para que lo mires a ver si tu ves el error (gracias mil).

El html del form:

Código HTML:
 <label for="RutaDoc">Documento:<input  name="file" type="file"/></div> 
Y este es el php que lo recoge (o debería)

Código PHP:
//Compruebo el tipo de fichero del Documento

var_dump($_FILES['file']); 
    
$mime_archivo=($_FILES['file']['type']);  
    
$mimes_aceptados=array('application/vnd.ms-excel');  
            if (!
in_array($mime_archivo,$mimes_aceptados))  
 
            {echo 
"<script type=\"text/javascript\">alert(\"El archivo no está en el formato adecuado solo se admite DOC, XLS, PPT, PDF, ZIP y RAR\");   
            window.history.back();  
            </script>"
;  
            exit;}  

//Compruebo el tamaño del fichero  

            
if($_FILES['file']['size']>5000000
            {echo 
"<script type=\"text/javascript\">alert(\"El tamaño no es correcto deber ser inferior a 1MB\");  
            window.history.back();  
            </script>"
;  
            exit;}  

//Compruebo que no se produzcan errores  

            
if($_FILES['file']['error']!=0
            {echo 
"<script type=\"text/javascript\">alert(\"Error al copiar el archivo\");  
            window.history.back();  
            </script>"
;  
            exit; }  

//defino donde guardo los archivos  

    
$RutaDoc "/Documentos/{$_FILES['file'][name]}"
    
    
            if(!
copy($_FILES['file']['tmp_name'], $rutaDoc)) 
            {echo 
"<script type=\"text/javascript\">alert(\"Error al copiar el archivo\");  
            window.history.back();  
            </script>"
;   
            exit;} 
Entenderé que estés arto de mi, pero te agradecería una ayudita más.

Muchas gracias de nuevo
__________________
J.
¿Dónde está la tecla ‘ANY’?
(H. Simpson)
  #10 (permalink)  
Antiguo 22/07/2011, 03:15
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Problema con formatos MIME (...o similar)

No es que esté arto, es que tienes que pensar un poco más las cosas, lo que me pones ahí no es un error, es el var_dump que te dije que añadieras, quítalo y dejará de salir tu "error".

En cuanto al notice que te da, es en la función copy, te dice que la ruta de destino ($rutaDoc) está vacía, si miras dónde declaras esta variables, verás que te faltan unas comas simples en name:
$_FILES['file'][name] por $_FILES['file']['name']

A ver si terminamos este post ya y no dan más errores.

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?

Etiquetas: formatos, imagenes, mime, formulario
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 03:13.