Foros del Web » Programando para Internet » PHP »

se puede verificar el tipo de archivo en php?

Estas en el tema de se puede verificar el tipo de archivo en php? en el foro de PHP en Foros del Web. Buenas!!! Explico... Tengo un formulario que sube a una base de datos informacion, verifica campos obligatorios y todo bastante bien... ahora tengo un problema, en ...
  #1 (permalink)  
Antiguo 22/12/2010, 23:40
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Pregunta se puede verificar el tipo de archivo en php?

Buenas!!!

Explico...

Tengo un formulario que sube a una base de datos informacion, verifica campos obligatorios y todo bastante bien...

ahora tengo un problema,

en el campo de imagen para la fotografia se verifica que no este vacio, si no esta se selecciona segun el caso para redimencionarla y subirla al servidor y esto sin problemas ahora....

si escribo : "uherwhoiwe.jpg"

se cumplen los parametros
1.- el campo no esta vacio
2.- tiene extencion .jpg, .bmp, .gif

Pero la imagen NO existe y por obvio se bloquea y se cicla el script y ya no pasa de ahi, y obvio no guarda nada....

concretando...

¿Existe la manera de poder verificar que realmente sea una imagen lo que esta puesto?

de antemano gracias por su ayuda....

un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #2 (permalink)  
Antiguo 23/12/2010, 00:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: se puede verificar el tipo de archivo en php?

Usa un tipo de campo en tu formulario que sea tipo file, y a la hora de subirlo al servidor verifica el array $_FILES para que veas que es una imagen, posteriormente puedes usar getimagesize para verificar que sea una imagen.

Saludos.
  #3 (permalink)  
Antiguo 23/12/2010, 01:02
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: se puede verificar el tipo de archivo en php?

<saludos>
adicional a lo que ya te comentaron,
para enviar files necesitas dos cosas

1. que el formulario tenga el enctype igual a multipart/form-data
Ej

Código HTML:
Ver original
  1. <form action="" enctype="multipart/form-data" method="post">


2. que el formulario tenga un campo file para contener
la imagen que se va a transmitir
Ej

Código HTML:
Ver original
  1. <input type='file'>
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #4 (permalink)  
Antiguo 23/12/2010, 02:49
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Pregunta Respuesta: se puede verificar el tipo de archivo en php?

Buenas!!
si Gracias a los Dos por responder y les comento que efectivamente lo que me comentan ya lo tengo hecho pero aun asi hay la falla.
en cuyo caso entiendo que puede ser mi codigo que a continuacion pongo para buscar errores..

cabe aclarar que le quite todo lo que para efecto de la consulta no importa

Formulario
Código PHP:
<FORM name="formulario" ACTION="procesar.php" method="POST" enctype="multipart/form-data"
onsubmit="document.formulario.accion.value='Por favor espere un momento';document.formulario.accion.disabled=true;">
<
TABLE
<
TR
   <
TD>
<
b>Node Hermanos:</b><INPUT TYPE="text" NAME="hmnos" SIZE="3" MAXLENGTH="3" onclick="ilumina(this)" onKeyDown="return filtro(event)">
<
b>Religion:</b><INPUT TYPE="text" NAME="reli" SIZE="12" MAXLENGTH="12" onclick="ilumina(this)">
</
TD
</
TR>
<
TR
   <
TD>
<
b>Observacion de Tratamiento:</b><INPUT TYPE="text" NAME="obtra" SIZE="50" MAXLENGTH="50"onclick="ilumina(this)">
</
TD
<
hr>
<
center><b>Fotografia : </b><input type="file" name="userfile" size="50" onBlur="LimitAttach(this,1);" onclick="ilumina(this)"></center>
<
center><b><BR>Su Fotografia Deve Tener menos de 2Mb de tamaño y ser .JPGVerifiquelo Antes de Continuar.</b></center>
<
hr>
</
TABLE>
  <
br>
<
b>Para Terminar con el Registro Haz Click en:</b>
<
INPUT TYPE="submit" NAME="accion" VALUE="Siguiente" onclick="return validar()">
</
FORM
y para procesar....

Código PHP:
if (preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/"$email ) ) {
$tipo_archivo $_FILES["userfile"]["type"];
$tamano_archivo $_FILES["userfile"]["size"];
if (!((
strpos($tipo_archivo"gif") || strpos($tipo_archivo"jpeg")) && ( $tamano_archivo 2048000)))
   {echo 
" <script type='text/javascript'>history.back(alert('¡Extension o el Tamaño del archivo NO es Correcto.!'));</script>"; }
    
$idfoto $rug;
    
$uploaddir '../images/';
    
$uploadfile $uploaddir $idfoto.".jpg";
    
$foto$uploaddir $idfoto.".jpg";
       if (
is_uploaded_file($_FILES['userfile']['tmp_name']))
       {             
copy($_FILES['userfile']['tmp_name'],$uploadfile );
          
$original imagecreatefromjpeg($uploadfile); //para JPG exclusivamente
          
$thumb imagecreatetruecolor(71,85); // Lo haremos de un tamaño 150x150
          
$ancho imagesx($original);
          
$alto imagesy($original);
          
imagecopyresampled($thumb,$original,0,0,0,0,71,85,$ancho,$alto);
          
imagejpeg($thumb,"$uploadfile",90); // 90 es la calidad de compresión
        
} else {
          echo 
"<script type='text/javascript'>history.back(alert('¡NO SELECCIONO UNA FOTOGRAFIA, ES INDISPENSABLE PARA CONTINUAR!'));</script>";
        } } else {
          echo 
" <script type='text/javascript'>history.back(alert('¡El Correo Electronico es INVALIDO.!, ¡Tiene que ser un Correo Valido para Registrar!'));</script>";
        } 
?> 
Es posible que por ahi se me haya escapado alguna "llave" pero en Gral. es el codigo, tiene mucho mas pero para lo que quiero saber no tiene importancia, creo.... :p

de Antemano Gracias y un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #5 (permalink)  
Antiguo 23/12/2010, 03:36
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: se puede verificar el tipo de archivo en php?

el tipo de archivo del array[type] no devuelve la extensión, devuelve algo como image / jpg, lo mejor es que lo imprimas para ver lo que contiene, y cada navegador te puede devolver alguna variante. Lo mejor es que cojas el 'name' del array, y busques la extensión con el '.', despues lo compares con las extensiones que admites.

No sé si el error estará por hay..

Después transformas todo a jpg... creo que lo mejor es que entendieras primero lo que estas intentando de hacer y te saldrá un código más limpio.

Un saludo!
  #6 (permalink)  
Antiguo 24/12/2010, 12:59
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: se puede verificar el tipo de archivo en php?

Buenas!!

Gracias por Responder... mira lo que comentas ya lo eh hecho pero mi problema no radica en eso...
me explico mejor...

en el campo de imgen escribo cualquier cosa sin sentido y que por obvio no existe
entonces al pasar el nombre tiene la extencion
asi que asume que es valido pero en realidad no existe y como esta puesto que acepte la extencion .jpg

haber si me explique bien y ahora si lo deje claro...

un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #7 (permalink)  
Antiguo 24/12/2010, 13:07
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: se puede verificar el tipo de archivo en php?

Hola:

Un artículo al respecto: Revisar las imágenes antes de subirlas

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 24/12/2010, 13:07
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: se puede verificar el tipo de archivo en php?

Pero no deberías de poner la extensión a mano.. porque si yo pongo la imagen...

ola.jpg se quedaría como ola.jpg.jpg, nunca existirá, lo ideal es que hagas algo así:

$extensiones_ok = array('.jpg');

Después extraes la extensión de tu file - name , y le haces un if(in_array)..

De esa manera si el día de mañana quieres otra extensión no habra problema.

Si lo que quieres luego es usar otro nombre de imagen, puedes coger la extensión y añadirla al nuevo nombre, o si no, dejar el nombre original una vez verificado que sea correcto y no exista.

Un saludo!
  #9 (permalink)  
Antiguo 24/12/2010, 13:56
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 14 años, 6 meses
Puntos: 17
Respuesta: se puede verificar el tipo de archivo en php?

Cita:
Iniciado por HalconVigia Ver Mensaje
Buenas!!

Gracias por Responder... mira lo que comentas ya lo eh hecho pero mi problema no radica en eso...
me explico mejor...

en el campo de imgen escribo cualquier cosa sin sentido y que por obvio no existe
entonces al pasar el nombre tiene la extencion
asi que asume que es valido pero en realidad no existe y como esta puesto que acepte la extencion .jpg

haber si me explique bien y ahora si lo deje claro...

un saludo!!
Revisar por extension no te garantiza que realmente te esten enviando el archivo que esperas y bueno eso ya lo viste. voy a suponer que solo esperas imagenes asi que la forma mas sencilla de hacerlo es con la funcion getimagesize esta funcion te devuelve falso si no es realmente una imagen
Código PHP:
Ver original
  1. $temp_file =  $_FILES['myFile']['tmp_name'];  
  2. $image_info_array = getimagesize($temp_file);
  3.  
  4. if ($image_info_array !== false) {
  5.     $mime_type = $image_info_array['mime'];
  6.     switch($mime_type) {
  7.  
  8.     case "image/jpeg":
  9.         //agrega aqui los demas casos si hace falta
  10.  
  11.     }
  12. }
  13. else {
  14.     echo "Hey!! esto no es una imagen";
  15. }

la otra opcion es usando la extension file info
Código PHP:
Ver original
  1. $temp_file =  $_FILES['myFile']['tmp_name'];
  2. $fhandle = finfo_open(FILEINFO_MIME);
  3. $mime_type = finfo_file($fhandle,$temp_file);
  4.  
  5. switch($mime_type) {
  6.     case "image/jpeg":
  7.         // igual que en el anterio agregas tus casos aqui
  8. }
  #10 (permalink)  
Antiguo 24/12/2010, 16:37
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 15 años, 11 meses
Puntos: 12
Respuesta: se puede verificar el tipo de archivo en php?

Código PHP:
Ver original
  1. if (preg_match("@image/(gif|pjpeg|jpeg|png|x-png|bmp)$@", $_FILES['comprobante']['type'])){
  2.           //tu codigo :B
  3. }

ve si eso te ayuda.
__________________
Hosting en Chile en Silverhost - La solución en Hosting en Chile.
  #11 (permalink)  
Antiguo 24/12/2010, 16:41
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Respuesta: se puede verificar el tipo de archivo en php?

Buenas!!

Gracias a los Dos..

Voy a Probar y ya les comentare que sucedio y los resultados si lo logro

y aprovechando Feliz Navidad!!!

Saludos!!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!

Etiquetas: tipo, verificar
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:26.