Foros del Web » Programando para Internet » PHP »

Validaciones a archivo subido al servidor

Estas en el tema de Validaciones a archivo subido al servidor en el foro de PHP en Foros del Web. Hola a todos. Tengo un formulario que he logrado hacer funcionar a mi conveniencia, permitiendome adjuntar archivos junto con la informacion y mandando esto por ...
  #1 (permalink)  
Antiguo 06/11/2005, 13:01
 
Fecha de Ingreso: octubre-2005
Mensajes: 12
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Validaciones a archivo subido al servidor

Hola a todos.
Tengo un formulario que he logrado hacer funcionar a mi conveniencia, permitiendome adjuntar archivos junto con la informacion y mandando esto por mail directo desde el servidor. Ahora mi problema es,

¿Como puedo condicionar las caracrteristicas del archivo a adjuntar?

En mi ejemplo tengo el siguiente codigo:
Código PHP:
<?php 
    
include_once('class.phpmailer.php');
    
    
$postback = isset($_POST['postback']) ? true false;
    
    if (
$postback) {
        
extract($_POST);
    
    
$to '[email protected]';
    
$sbj 'Nombre del Mail';
    
$from '[email protected]';
    
$mail = new phpmailer (); 
    
$mail -> From $from;
    
$mail -> FromName "usuario 1";
    
$mail -> AddAddress ($to);
    
$mail -> Subject $sbj;
    
$mail -> Body $body;
    
$mail -> IsHTML (true);
    
$archivos '';
    
$msg 'Mensaje Enviado' ;
if (isset (
$_FILES["archivos"])) { 
    
$msg .= "<ul>";
foreach (
$_FILES["archivos"]["error"] as $key => $error) { 
if (
$error == UPLOAD_ERR_OK) { 
$tmp_name $_FILES["archivos"]["tmp_name"][$key];
$name $_FILES["archivos"]["name"][$key];
$msg .= "<li>$name</li>";
$name uniqid('bc') . '_' $name;
$mail -> AddAttachment ($tmp_name$name);                    }
}
$msg .= '</ul>';
}
if (!
$mail -> Send ()){
$msg "No se pudo enviar el email";
    }
}
?>
Ahora esto funiciona muy bien, y los correos me llegan con los archivos adjuntos sin problemas. Los archivos adjuntos que quiero recibir son imagenes, y de caracteristicas predeterminadad (Tamaño, Peso, Tipo).
Mi pregunta es Como puedo hacer estas condicionantes, o como puedo editar la imagen que me quieran mandar antes de que la adjunte en el correo????

Bueno espero no sea muy complicado y mil gracias por su ayuda.

JMR_MANOLO

Última edición por jmr_manolo; 07/11/2005 a las 01:58 Razón: Corregir codigo
  #2 (permalink)  
Antiguo 06/11/2005, 13:24
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 12 años, 10 meses
Puntos: 0
Para comprobar si lo que te envian son imágenes, podés extraer la extensión y verificar que sea jpg, jpeg, gif, png, etc. SIEMPRE del último punto en adelante (la extensión). Podés usar substr y otras funcionas para extraerla del nombre del archivo.

Para el tamaño podés usar getimagesize.

Y para todo lo que sea tratamiento de imágenes, usá las funciones de la galería gd.

Explicaciones de todo eso que puse arriba las podés encontrar en www.php.net

Suerte
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #3 (permalink)  
Antiguo 07/11/2005, 05:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cuando tu subes tu archivo .. todas las propiedades del mismo lo tienes en:

$tmp_name = $_FILES["archivos"]["tmp_name"][$key];

bajo "['type']" por ejemplo (en lugar de tmp_name) tendrías el tipo del archivo .. tambien en "size" tendrías el tamaño .. así que puedes ir por ahí filtrando lo que requieras.

Un saludo,

PD: .. cambié el título del mensaje . .tu problema no tiene nada que ver con PHP Mailer, sino con la gestión de tus archivos que subes por "Upload".
  #4 (permalink)  
Antiguo 07/11/2005, 08:55
 
Fecha de Ingreso: octubre-2005
Mensajes: 12
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Ok pero....

Antes que nada Gracias CLUSTER.

Entiendo bien lo de filtrar los archivos por tipo y peso, pero hasta ahora lo que he logrado es que no se envie el archivo adjunto, pero si se envia el mail.
Lo que me gustaria poder lograr es que no se mandara el mail y que te botara un mensaje de que no se envio el mail por "xmotivo", y ahi es donde tengo la bronca.

Así mismo, tambien tengo el problema de que no se como considerar dos o tres tipos de archivos, pues con el $_FILES["archivos"]["type"] solo puedo marcar un tipo, y yo necesito dejarlo abierto a los principales tipo de imagenes...

Ahora ves mi dilema

JMR_MANOLO
  #5 (permalink)  
Antiguo 07/11/2005, 10:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues .. si dices saber validar tu archivo .. PON ese if() (o validación) antes de componer tu e-mail..
Código PHP:
if (validacion_pasa){
// todo el código que envia el e-mail .. (justo todo lo que pusistes en el mensaje anterior).
} else {
// no hacer nada ...

Cita:
Así mismo, tambien tengo el problema de que no se como considerar dos o tres tipos de archivos, pues con el $_FILES["archivos"]["type"] solo puedo marcar un tipo, y yo necesito dejarlo abierto a los principales tipo de imagenes...
Puedes usar array's o una série de switch() para tal fin ...

Un saludo,
  #6 (permalink)  
Antiguo 07/11/2005, 11:12
 
Fecha de Ingreso: octubre-2005
Mensajes: 12
Antigüedad: 12 años, 1 mes
Puntos: 0
Ok, lo trate

Gracias Cluster por la asesoria.
Te comento que ya trate de poner la condicionante, pero me produce un mal funcionamiento del formulario. Integre el codigo despues de varios intentos asi:
Código PHP:
<?php 
    
// Para el envío de mails
    
include_once('class.phpmailer.php');
    
// Indica si los datos provienen del formulario
    
$postback = isset($_POST['postback']) ? true false;
        
    if (
$postback) {
        
extract($_POST);
        
if ((
$_FILES['archivos']['type'] == 'image/gif') &&
(
$_FILES['archivos']['size'] < 716800))
{
    
// HTML body
    
$body  "Titulo Inicio = " $titinicio "<br>";
    
$body .= "<br>";
    
$body .= "Texto Inicio: <br>";
    
$body .= ""$txtinicio "";

    
// Plain text body (for mail clients that cannot read HTML)
    
$text_body  "Titulo Inicio= " $titinicio "\n\n";
    
$text_body .= "\n\n";
    
$text_body .= "Texto Inicio:\n\n";
    
$text_body .= "" $txtinicio "";



        
$to '[email protected]';
        
$sbj 'Captura';
        
$from '[email protected]';
        
$mail = new phpmailer (); # Crea una instancia
        
$mail -> From $from;
        
$mail -> FromName "Captura"
        
$mail -> AddAddress ($to);
        
$mail -> Subject $sbj;
        
$mail -> Body $body;
        
$mail -> IsHTML (true);
        
$archivos '';
        
$msg 'Mensaje Enviado' ;
       
        
        
           if (isset (
$_FILES["archivos"])) { 
    
$msg .= "<ul>";
    foreach (
$_FILES["archivos"]["error"] as $key => $error) { 
        if (
$error == UPLOAD_ERR_OK) { // Si no hay error
        
$tmp_name $_FILES["archivos"]["tmp_name"][$key];
        
$name $_FILES["archivos"]["name"][$key];
        
$msg .= "<li>$name</li>";
        
$name uniqid('bc') . '_Inicio_' $name;                 $mail -> AddAttachment ($tmp_name$name);                 } #if
               
# foreach
    
$msg .= '</ul>';
    
$msg .= '<a href="uploader2.php">Continuar con Siguiente</a>';
        } 
# if
        
if (!$mail -> Send ()){
            
$msg "No se pudo enviar el email";
        }}else
    {
$msg "Sorry, we only accept .gif images under 5Kb for upload.";}
    }
?>
y de esta manera al cargar la página no aparece de entrada el msg "Sorry, we only accept .gif images under 5Kb for upload." que me pasaba si colocaba el codigo en otro sitio.

Pero de esta forma, no importa que archivo escoga siempre genera al enviar el msg "Sorry, we only accept .gif images under 5Kb for upload.", y no envia nada al correo...
Alguna idea de porque???

Por otro lado no se bien como manejar los diferentes tipos de archivos. Trate asi:
Código PHP:
(($_FILES['archivos']['type'] == 'image/gif') || ($_FILES['archivos']['type'] == 'image/jpg') && ($_FILES['archivos']['size'] < 716800)) 
pero no se si es correcto o no !!!!

JMR_MANOLO
  #7 (permalink)  
Antiguo 07/11/2005, 11:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Para aclararnos ..

Define bajo que condicones tienes que generar el e-mail .. así podremos ir atinando un poco mejor con el condicional (IF) que debes emplear (pero el problema de "lógica" lo que tienes ..)

Un saludo,
  #8 (permalink)  
Antiguo 07/11/2005, 11:56
 
Fecha de Ingreso: octubre-2005
Mensajes: 12
Antigüedad: 12 años, 1 mes
Puntos: 0
??? no se si entendi...

La idea la puedes ver en etse link, y la intencion es que el archivo que aqui se suba sea una imagen (.gif, .jpg o .png) que no pese mas de cierto tamaño...
haber si con eso me explico...
Y si estoy de acuerdo contigo mi problema es de logica, pero la bronca es que mi logica dice que esta bien, pero no funciona....
jajaja

JMR_MANOLO
  #9 (permalink)  
Antiguo 07/11/2005, 12:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si dices que "Sólo gif" y de un tamaño menor a 716800 bytes sería:

Código PHP:
if ($_FILES['archivos']['type'] == 'image/gif' && $_FILES['archivos']['size'] < 716800) {
// generas tu e-mail
} else {
// el tipo de archivo no es gif o es mayor de 716800 bytes

Y obligado una imagen .. no sé si a su vez no importa si sube imagen o no .. pero si la sube que sea de esas características?

Un saludo,
  #10 (permalink)  
Antiguo 07/11/2005, 13:11
 
Fecha de Ingreso: octubre-2005
Mensajes: 12
Antigüedad: 12 años, 1 mes
Puntos: 0
Exacto ese es mi problema, pues lo que yo quiero es que avise que el archivo no corresponde a lo que debe ser, y que no envie el mail, para darle oportunidad a los usuarios de escoger otro archivo, y entonces si mandarlo....


JMR_MANOLO
  #11 (permalink)  
Antiguo 07/11/2005, 13:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En PHP tienes un problema al respecto .. Tienes que esperar a que suba el archivo por completo al servidor para ver su extensión o tamaño.

Vía Javacript podrías a lo sumo ver la extensión del archivo (para entregar un aviso más rápido) ..

Decide ... por qué para cuando PHP valida .. tu formulario completo lo has tenido que enviar .. En consecuencia deberías devolver a la página del formulario con los datos pre-cargados restantes menos el del archivo para que escoja otro. Pero con el tiempo de espera para que suba el archivo al servidor.

Un saludo,
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 20:58.