• Domingo 22 de Diciembre de 2024, 15:32

Autor Tema:  No Reconoce Archivo Jpg  (Leído 3685 veces)

sheilac

  • Miembro activo
  • **
  • Mensajes: 98
    • Ver Perfil
No Reconoce Archivo Jpg
« en: Jueves 30 de Agosto de 2007, 00:38 »
0
Hola tengo un inconveniente con un mini sitio que hice  :huh:
en el servidor con php 5 que lo probe funciona todo barbaro.
Es un envio de un mail con un atach que es una imagen , una foto
Me llega el mail a  todas las direcciones de correo donde lo probe y llega el adjunto de la foto barbaro.
En el servidor actual donde esta el sitio no funciona me larga el error del codigo
este es el codigo php para el envio del mail
Código: Text
  1.  
  2.  
  3.  
  4. <?
  5.  
  6. $emailDestination = "00001@yahoo.com";
  7.  
  8. $emailOrigin="222@dfd.com.uy";
  9. $nameEmailOrigin = "fdd@nfdfd.com.uy";
  10. $subject='Yo quiero ser ';
  11.  
  12. if($file_type!="image/jpeg"&&$file_type!="image/pjpeg"&&$file_type!="image/gif"&&$file_type!="image"&&$file_type!="IMAGE/PJPEJ"&&$file_type!="IMAGE/JPEG"&&$file_type!="image/GIF"&&$file_type!="IMAGE"){die("Tipo de archivo equivocado");}
  13.  
  14. $archivo=fopen($file, 'rb');
  15. $contenido=fread($archivo, filesize($file));
  16. $contenido=chunk_split(base64_encode($contenido));  
  17. $tipo=filetype($file);
  18. fclose($archivo);
  19.  
  20.  
  21. $mime_boundary=md5(time());  
  22.  
  23. $msg .= "From: " .$nameEmailOrigin." \r\n";
  24.  
  25.  
  26. $msg .= "MIME-Version: 1.0 \r\n";  // Version MIME a utilizar
  27. $msg .= "Content-Type: multipart/mixed; boundary=\"".$mime_boundary."\"\r\n\r\n";
  28.  
  29. // Aqui vamos a realizar la inclusion del archivo adjunto
  30. $msg .= "--".$mime_boundary."\r\n";
  31. $msg .= "Content-Type: $file_type; name=\"".$file_name."\"\r\n";
  32. $msg .= "Content-Transfer-Encoding: base64 \r\n";
  33. $msg .= "Content-Disposition: attachment; filename=\"".$file_name."\"\r\n\r\n";
  34. $msg .= $contenido."\r\n\r\n";  
  35. $msg .= "--".$mime_boundary."\r\n";
  36. $msg .= "Content-Type: text/plain; charset=iso-8859-1 \r\n";
  37. $msg .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
  38. $msg .="Este mensaje fue enviado por:  ".$nombre." ".$apellido." \r\n";
  39. $msg .="\r\nSu e-mail es: ".$email;
  40. $msg .="\r\nTelefono: ".$telefono;
  41. $msg .="\r\nColegio: ".$colegio;
  42. $msg .="\r\nFecha de Nacimiento: ".$fechanacimiento;
  43. $msg .="\r\nMensaje: ".$comentario;
  44. $msg .= "\r\n\r\n";  
  45. $msg .= "--".$mime_boundary."--"."\r\n\r\n";
  46.  
  47. if(mail($emailDestination,$subject,"" ,$msg))
  48.  
  49. include ('gracias.htm');
  50.  
  51. else{
  52. }
  53.  
  54. ?>
  55.  
  56.  
en el nuevo servidor actual me larga siempre el error tipo de archivo equivocado que es el error que largo yo en la validacion del tipo de archivo y jamas me envia el correo en cambio en el otro servidor funciona barbaro asi que no creo sea problema de codigo. no se espero.
Me dicen que el servidor es php 5 pero que no me pueden dar mayor informacion.
alguien sabe que podra ser???
desde ya muchas gracias

-DriverOp-

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: No Reconoce Archivo Jpg
« Respuesta #1 en: Jueves 30 de Agosto de 2007, 00:56 »
0
De dónde sale la variable $file_type?

sheilac

  • Miembro activo
  • **
  • Mensajes: 98
    • Ver Perfil
Re: No Reconoce Archivo Jpg
« Respuesta #2 en: Jueves 30 de Agosto de 2007, 03:27 »
0
en mi formulario tengo un input tipo
Código: Text
  1.  
  2.  
  3. <td align="left" width="99" height="120" class="direccion" valign="bottom">
  4.                 <input title="subir" type="file" id="file" name="file" border="0" onchange="return cambio()" ></div>
  5.        
  6.                 </td>
  7.  
  8.  

y en el formulario aclare esto
Código: Text
  1.  
  2.  <form   align ="top" name="formulario"  action="enviar.php"  method="post" onsubmit="return validar()" enctype="multipart/form-data">
  3.                          
  4.  

el multipart/form-data es para que se sepa que ademas de texto se va a recibir mas algo que no es texto.
lo que yo queria validar es que solo se reciban imagenes y no algun archivo .exe que puede tener virus
desde ya muchas gracias

la gran duda mia es porque si funciona en un servidor y en otro no.
 :unsure:

-DriverOp-

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: No Reconoce Archivo Jpg
« Respuesta #3 en: Jueves 30 de Agosto de 2007, 23:01 »
0
Lamentablemente eso no responde mi pregunta. Así que tendré que suponer.
Supongo que $file_type la usas creyendo que el servidor está configurado con register_globals on, lo cual no siempre es así, creo que deberías comenzar con asignar explícitamente las variables que te llegan mediante $_POST.

Sugiero que postees el script *completo*.

sheilac

  • Miembro activo
  • **
  • Mensajes: 98
    • Ver Perfil
Re: No Reconoce Archivo Jpg
« Respuesta #4 en: Viernes 31 de Agosto de 2007, 05:16 »
0
te mande el script completo  :o
lo que comente solo fue las direcciones de correo reales.
y si asumi esas variables estan en on porque es lo que dice el manual de php que en versiones 5.0 y superior estan en on

mirando en internet me dice debo declarar la variable global y agregar estas lineas
 :smartass:


if(!empty($_REQUEST)) extract($_REQUEST);
if(!empty($_SERVER)) extract($_SERVER);
if(!empty($_ENV)) extract($_ENV);
if(!empty($_GET)) extract($_GET);
if(!empty($_POST)) extract($_POST);

y poner
global $file_type;
 porque esto haria que mi script funcionara como si las variables  globales estuvieran en on...
es esto cierto???
consulto a ustedes ya que son mis primeros pasos en php y por lo visto muy bien no voy.
desde ya muchas gracias  :(

-DriverOp-

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: No Reconoce Archivo Jpg
« Respuesta #5 en: Viernes 31 de Agosto de 2007, 09:11 »
0
Todo lo contrario. Desde la versión 4 de PHP register_globals está en OFF por omisión porque se sabe que cuando está en ON resulta en un agujero de seguridad.

Por lo tanto, lo que debes hacer es usar los arrays $_POST/$_GET/$_FILES/$_SESSIONS/$_COOKIE para tomar los diferentes parámetros que se le envian a tu script.

En tu caso *supongo* que debería ser así para la variable que nos ocupa:

$file_type = @$_POST["file_type"];

El "@" sirve para que no te salte error en caso que el índice "file_type" no exista en el array $_POST y la variable a la izquierda de la asignación quedaría vacia.

De todas formas no estoy seguro de que "file_type" venga en $_POST, podría venir en $_FILES así que te propongo lo siquiente:

Escribe un script de prueba que solo contenga esto:
Código: Text
  1.  
  2. <b>Variables en _FILES:</b>
  3. <pre>
  4. <?php var_dump($_FILES); ?>
  5. </pre>
  6. <b>Variables en _POST:</b>
  7. <pre>
  8. <?php var_dump($_POST); ?>
  9. </pre>
  10.  
  11.  
Y haz que el formulario invoque a este script, así sabrás por dónde te llegan los parámetros y cómo extraerlos.

Altareum

  • Miembro MUY activo
  • ***
  • Mensajes: 327
    • Ver Perfil
    • http://www.avian.com.ar
Re: No Reconoce Archivo Jpg
« Respuesta #6 en: Viernes 31 de Agosto de 2007, 16:23 »
0
Sheilac, como dijo DriverOp, register globals está desactivado por cuestiones de seguridad, y por lo mismo te aconsejo que no lo uses.


En el caso del envío de archivos, estos se encontrarán en $_FILES. El cual es un Array, con la información básica de cada archivo. Los keys de $_FILES, estarán dados, por la propiedad name del formulario.

Por ejemplo si tienes el siguiente input:
Código: Text
  1.  
  2. <input type="file" name="logo">
  3.  
  4.  

$_FILES quedará entonces de la siguiente forma:
Código: Text
  1.  
  2. Array (
  3.     [logo] =>
  4.         Array (
  5.             [name] => prod_82.jpg
  6.             [type] => image/jpeg
  7.             [tmp_name] => /tmp/phpM0NjQb
  8.             [error] => 0
  9.             [size] => 46021
  10.         )
  11. )
  12.  
  13.  

Donde:
name: Nombre del archivo enviado.
type: Mime del archivo enviado.
tmp_name: Ruta y nombre del archivo temporal generado.
error: Índice perteneciente al error producido. 0 si no hubo error.
size: Tamaño del archivo.


Por lo cual tu variable $file_type en realidad sería $_FILES['logo']['type'], y lo que debes adjuantar al mail es $_FILES['logo']['tmp_name'].


Altareum.
El postre!, el postre!, el postre!, el postre!, el postre!, el postre!.....
 | Klinka | Kiree | Avian |

sheilac

  • Miembro activo
  • **
  • Mensajes: 98
    • Ver Perfil
Re: No Reconoce Archivo Jpg
« Respuesta #7 en: Sábado 1 de Septiembre de 2007, 21:54 »
0
Muchisimas gracias a los dos han sido muy amables.
hice los cambios que me dijeron y solo me resta cruzar los dedos y esperar que funcione.
Aunque me imagino asi sera, continua funcionando en el sitio donde funcionaba asi que espero funcione ahora en este sitio.
muchas gracias
hice la prueba que me dijistes  -DriverOp-
y esta cargado en $_FILES
como decia Altareum asi que mil gracias a los dos. ;)
saludos

sheilac

  • Miembro activo
  • **
  • Mensajes: 98
    • Ver Perfil
Re: No Reconoce Archivo Jpg
« Respuesta #8 en: Martes 4 de Septiembre de 2007, 00:01 »
0
holaaaaaaaaa
una ultima duda (espero)
porque si lo mando a cuatro correos a tres de ellos me llega bien, adinet, yahoo, montevideo.com,  y a gmail me llegan todas letras y no la imagen????
con el codigo que indique arriba claro.
desde ya muchas gracias
el problema es que si la imagen se mira desde internet todo bien, ahora si ese mail tanto de montevideo.com como de adinet los bajo por outlock para tenerlos en el disco ahi me guarda letras
que puede ser???