Foros del Web » Programando para Internet » PHP »

Como hago lo siguiente..

Estas en el tema de Como hago lo siguiente.. en el foro de PHP en Foros del Web. Quisiera limitar el tamaño de los archivos a adjuntar y que saltase una venta de "exceso de tamaño" o algo asi antes de que le ...
  #1 (permalink)  
Antiguo 30/04/2011, 06:08
Avatar de elpirata15hd  
Fecha de Ingreso: abril-2011
Mensajes: 44
Antigüedad: 13 años, 7 meses
Puntos: 0
Como hago lo siguiente..

Quisiera limitar el tamaño de los archivos a adjuntar y que saltase una venta de "exceso de tamaño" o algo asi antes de que le den a enviar para que no haya problemas.El codigo que utilice es el siguiente

Código:
<?php
function form_mail($sPara, $sAsunto, $sTexto, $sDe)
{
$bHayFicheros = 0;
$sCabeceraTexto = "";
$sAdjuntos = "";

if ($sDe)$sCabeceras = "From:".$sDe."\n";
else $sCabeceras = "";
$sCabeceras .= "MIME-version: 1.0\n";
foreach ($_POST as $sNombre => $sValor)
$sTexto = $sTexto."\n".$sNombre." = ".$sValor;

foreach ($_FILES as $vAdjunto)
{
if ($bHayFicheros == 0)
{
$bHayFicheros = 1;
$sCabeceras .= "Content-type: multipart/mixed;";
$sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n";

$sCabeceraTexto = "----_Separador-de-mensajes_--\n";
$sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n";
$sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n";

$sTexto = $sCabeceraTexto.$sTexto;
}
if ($vAdjunto["size"] > 0)
{
$sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n";
$sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";;
$sAdjuntos .= "Content-Transfer-Encoding: BASE64\n";
$sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n";

$oFichero = fopen($vAdjunto["tmp_name"], 'r');
$sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"]));
$sAdjuntos .= chunk_split(base64_encode($sContenido));
fclose($oFichero);
}
}

if ($bHayFicheros)
$sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n";
return(mail($sPara, $sAsunto, $sTexto, $sCabeceras));
}

//cambiar aqui el email
if (form_mail("[email protected]", $_POST[asunto],
"Los datos introducidos en el formulario son:\n\n", $_POST[email]))
header("Location: index.php?opc=1");
?>
Creo que para limitar el tamaño del adjunto es esta linea if ($vAdjunto["size"] > 0)
La intente modificar pero no funciona y que salte esa ventana de "exceso de tamaño" no se sacarla

Este codigo funciona perfectamente para adjuntar archivos!
  #2 (permalink)  
Antiguo 30/04/2011, 09:46
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 7 meses
Puntos: 406
Respuesta: Como hago lo siguiente..

La linea indicada es la correcta, aunque como esta en estos momentos solo verifica que el tamaño no sea 0, para lo que quieres seria algo así:
Código PHP:
Ver original
  1. // Demas código PHP
  2. $pesoMaximo = 1024 * 500; //Que seria 500kb ya que 1kb es 1024bytes, para 1mb es 1024kb
  3. if ($vAdjunto["size"] > 0 && $vAdjunto["size"] < $pesoMaximo)
  4. {
  5.       $sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n";
  6.       $sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";;
  7.       $sAdjuntos .= "Content-Transfer-Encoding: BASE64\n";
  8.       $sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n";
  9.  
  10.       $oFichero = fopen($vAdjunto["tmp_name"], 'r');
  11.       $sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"]));
  12.       $sAdjuntos .= chunk_split(base64_encode($sContenido));
  13.       fclose($oFichero);
  14. }else {
  15.       die("Exceso de tamaño");
  16. }
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 01/05/2011, 02:05
Avatar de elpirata15hd  
Fecha de Ingreso: abril-2011
Mensajes: 44
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Como hago lo siguiente..

ya lo coloque,y nada,puse una foto de 2 megas y la envio,no llego pero salio que se envio correctamente,asi deje el codigo

Código:
<?php
function form_mail($sPara, $sAsunto, $sTexto, $sDe)
{
$bHayFicheros = 0;
$sCabeceraTexto = "";
$sAdjuntos = "";

if ($sDe)$sCabeceras = "From:".$sDe."\n";
else $sCabeceras = "";
$sCabeceras .= "MIME-version: 1.0\n";
foreach ($_POST as $sNombre => $sValor)
$sTexto = $sTexto."\n".$sNombre." = ".$sValor;

foreach ($_FILES as $vAdjunto)
{
if ($bHayFicheros == 0)
{
$bHayFicheros = 1;
$sCabeceras .= "Content-type: multipart/mixed;";
$sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n";

$sCabeceraTexto = "----_Separador-de-mensajes_--\n";
$sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n";
$sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n";

$sTexto = $sCabeceraTexto.$sTexto;
}
$pesoMaximo = 1024 * 500; //Que seria 500kb ya que 1kb es 1024bytes, para 1mb es 1024kb
if ($vAdjunto["size"] > 0 && $vAdjunto["size"] < $pesoMaximo)
{
$sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n";
$sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";;
$sAdjuntos .= "Content-Transfer-Encoding: BASE64\n";
$sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n";

$oFichero = fopen($vAdjunto["tmp_name"], 'r');
$sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"]));
$sAdjuntos .= chunk_split(base64_encode($sContenido));
fclose($oFichero);
}else {
      die("Exceso de tamaño");
}
}
if ($bHayFicheros)
$sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n";
return(mail($sPara, $sAsunto, $sTexto, $sCabeceras));
}

//cambiar aqui el email
if (form_mail("[email protected]", $_POST[asunto],
"Los datos introducidos en el formulario son:\n\n", $_POST[email]))
header("Location: index.php?opc=1");
?>

Etiquetas: siguiente
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 14:14.