Comunidad de diseño web y desarrollo en internet online

Servidor contra variables _global

Citar            
MensajeEscrito el 28 Nov 2009 05:01 pm
Hola Amigos,
estoy usando los servicios de un hosting pago y en las configuraciones de PHP del servidor (linux) las variables global están deshabilitadas por precaución a los ataques externos. Yo estoy usando en el código PHP de mi formulario de contacto, una variable "global" para verificar la autenticidad de la dirección de correo del usuario, pero la limitación del servidor bloquea el código en ese punto (al llegar a la variable global) y los mensajes enviados por el formulario nunca salen a su destino. Los señores del servidor me dicen que ellos no prestan ayuda de programación. Sin embargo me sugieren que cambie la variable global por $SERVER...y se leería así: $SERVER ["HTTP HOST"] en ves de global $HTTP_HOST......ya lo intenté e igual no funciona.
Quien pueda darme luces con esto se lo agradezco de antemano.....
Aquí el código completo:

Código :

<?php


$name=$_POST['name'];
$email=$_POST['email'];
$subject=$_POST['subject'];
$message=$_POST['message'];
$name=trim($name);
$email=trim($email);
$subject=StripSlashes($subject);
$message=StripSlashes($message);
$toaddress='[email protected]';
function validate_email($email) {
  global $HTTP_HOST
  if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
   return 1;
  }  
   list ( $Username, $Domain ) = split ("@",$email);
    if (checkdnsrr ( $Domain, "MX" ))  {  
    if (getmxrr ($Domain, $MXrec))  {  
   $Mailserver = $MXrec[0];
    } else {     
      return 2; 
    }
  } else {
    
    $Mailserver = $Domain;
  }

  if ($Connection = fsockopen($Mailserver, 25)) {  

    if (ereg("^220", $Rubbish = fgets($Connection, 1024))) {
           
      fputs ( $Connection, " HELO $HTTP_HOST\r\n" );  
      $Rubbish = fgets ( $Connection, 1024 );   
      fputs ( $Connection, "MAIL FROM: <{$email}>\r\n" );  
      $Fromstring = fgets ( $Connection, 1024 );      
      fputs ( $Connection, "RCPT TO: <{$email}>\r\n" );  
      $Tostring = fgets ( $Connection, 1024 );   
      fputs ( $Connection, "QUIT\r\n");      
       fclose($Connection);      
      if (ereg("^250", $Fromstring) && ereg("^250", $Tostring)) {        
       return 0; 
      } else {        
        return 1; 
      }
    } else {
    
      return 1; 
    }
  } else {   
    return 1; 
  }
}

$valid = validate_email($email);

switch ($valid) {

  case 0:
    mail($toaddress,$subject,$message,"From: $name <$email>");
   
     $name='';
     $email='';
     $subject='';
     $message='';
     echo 'response=passed';
     break;
  case 1:
     echo 'response=invalid';
     break;
  case 2:
     echo 'response=error';
     break;

}

?>

Por zapata

46 de clabLevel



Genero:Masculino  

Venezuela

firefox
Citar            
MensajeEscrito el 29 Nov 2009 03:28 am
Es...

Código PHP :

$host = $_SERVER["HTTP_HOST"];

Te faltó el guión bajo.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 29 Nov 2009 09:18 pm
Gracias....
Lo usé como me indicas pero todavía no funciona.
Este es el código que esé:

Código :

<?php


$name=$_POST['name'];
$email=$_POST['email'];
$subject=$_POST['subject'];
$message=$_POST['message'];
$name=trim($name);
$email=trim($email);
$subject=StripSlashes($subject);
$message=StripSlashes($message);
$toaddress='[email protected]';
function validate_email($email) {
  $host = $_SERVER["HTTP_HOST"]; 
  if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
   return 1;
  }  
   list ( $Username, $Domain ) = split ("@",$email);
    if (checkdnsrr ( $Domain, "MX" ))  {  
    if (getmxrr ($Domain, $MXrec))  {  
   $Mailserver = $MXrec[0];
    } else {     
      return 2; 
    }
  } else {
    
    $Mailserver = $Domain;
  }

  if ($Connection = fsockopen($Mailserver, 25)) {  

    if (ereg("^220", $Rubbish = fgets($Connection, 1024))) {
           
      fputs ( $Connection, " HELO $host\r\n" );  
      $Rubbish = fgets ( $Connection, 1024 );   
      fputs ( $Connection, "MAIL FROM: <{$email}>\r\n" );  
      $Fromstring = fgets ( $Connection, 1024 );      
      fputs ( $Connection, "RCPT TO: <{$email}>\r\n" );  
      $Tostring = fgets ( $Connection, 1024 );   
      fputs ( $Connection, "QUIT\r\n");      
       fclose($Connection);      
      if (ereg("^250", $Fromstring) && ereg("^250", $Tostring)) {        
       return 0; 
      } else {        
        return 1; 
      }
    } else {
    
      return 1; 
    }
  } else {   
    return 1; 
  }
}

$valid = validate_email($email);

switch ($valid) {

  case 0:
    mail($toaddress,$subject,$message,"From: $name <$email>");
   
     $name='';
     $email='';
     $subject='';
     $message='';
     echo 'response=passed';
     break;
  case 1:
     echo 'response=invalid';
     break;
  case 2:
     echo 'response=error';
     break;

}

?>

Por zapata

46 de clabLevel



Genero:Masculino  

Venezuela

firefox
Citar            
MensajeEscrito el 30 Nov 2009 01:15 am
¿Qué es lo que no funciona exactamente?.

Por lo que veo estás tratando de conectarte a un SMTP usando directamente el protocolo de envio de e-mail. Celebro tu esfuerzo pero hay cosas que no están bien.

Lo primero que envias es HELO pero tiene un espacio delante, lo cual invalida el comando, y le pasas como parámetro $host, esta variable contiene la dirección URL de tu sitio web en la forma "http://tudominio.com/", lo cual es irrelevante puesto que HELO no tiene parámetros (el parámetro es opcional).

En definitiva, tu problema no está en lo que has preguntado y te hemos respondido, está en otra parte.

Si tu problema de fondo es que no puedes usar la función mail() de PHP porque está deshabilitada en el hosting (algo bastante común y nada extraño) no te rompas la cabeza, bájate el componente Swift Mailer que ya hace exactamente lo que quieres hacer aquí pero de una forma mucho más cómoda para ti y además más completa pues ya tiene implementado el protocolo de autenticación, puedes armar correos HTML, con adjuntos, conectarte a servidores de GMail, etc... Y todo lo puedes hacer con cuatro líneas de código.

Si tu problema es verificar que una dirección de correo existe en un servidor determinado, ésta forma, aunque ingeniosa, tampoco dará resultado puesto que la gran mayoría de los servidores de correo ya no admiten conexiones anónimas como parece que quieres hacer aquí pues después de MAIL FROM, el servidor te pedirá que envies AUTH con la contraseña (a veces encriptada) del usuario, algo que no sabes ni puedes saber.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 01 Dic 2009 05:13 am
Hola DriverOp,
Te agradezco un montón que me estés tratando de ayudar. La cuestión es esta: el servidor no me deja usar varaibles "global"...este código venía funcionando bien en otros servidores linux, quiero decir, en versiones anteriores. Lo de HELO lo puedo corregir, de hecho en el PHP que uso aparece como dices, sin espacio delante, creo que en la copia para imprimirlo aquí, lo rodé.
Lo de la variable "host" la usé porque en ella está el contenido que me sugirieron la gente del servidor $_SERVER["HTTP_HOST"]; y tu sugeriste, en tu primera intervención, que lo englobara en esa variable:
$host = $_SERVER["HTTP_HOST"]; para hacer la conección en: fputs ( $Connection, "HELO $host\r\n" );...el original que funcionaba dice: fputs ( $Connection, "HELO $HTTP_HOST\r\n" ); que viene del "global $HTTP_HOST" que es el meollo del problema.
Gracias por sugerir el Swift Mailer, le voy a hechar un vistazo en serio a ver si entiendo como hacerlo con flash.

Gracias DriverOp por tu tiempo y el esfuerzo.

Por zapata

46 de clabLevel



Genero:Masculino  

Venezuela

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.