Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/01/2011, 20:57
Avatar de luisvasquez
luisvasquez
 
Fecha de Ingreso: diciembre-2003
Ubicación: Venezuela
Mensajes: 879
Antigüedad: 20 años, 5 meses
Puntos: 6
Problema con array cargado desde archivo

Amig@s,

Tengo un problema y no doy con la solución. Estoy cargando un array desde un archivo de texto y cuando muestro su contenido está perfecto, tanto recorriendolo (foreach) como con var_dump($arreglo);

Ahora bien, estoy usando una clase llamada smtp_validateEmail.class.php que permite realizar validaciones de emails, no de formato sino si el buzón realmente existe en el servidor.

Este ejemplo funciona correctamente validando la existencia del recipiente [email protected]

Código:
<?php

$email = '[email protected]';
require_once('smtp_validateEmail.class.php');
$sender = '[email protected]';
$SMTP_Validator = new SMTP_validateEmail();
$SMTP_Validator->debug = true;
$results = $SMTP_Validator->validate(array($email), $sender); // Observen que la variable del correo se convierte a un arreglo para entrar a la función
echo $email.' is '.($results[$email] ? 'valid' : 'invalid')."\n";
?>
Un modo para validar varios correos a la vez es colocarlos en un array, asi:


Código:
<?php

$emails = array('[email protected]', '[email protected]', '[email protected]', '[email protected]');
require_once('smtp_validateEmail.class.php');
$sender = '[email protected]';
$SMTP_Validator = new SMTP_validateEmail();
$SMTP_Validator->debug = true;
$results = $SMTP_Validator->validate($emails, $sender);
foreach($results as $email=>$result) {
    if ($result) {
          echo 'El correo '. $email.' es valido'; 
   } else {
         echo 'El correo '. $email.' no es valido';
  }
}

?>
Como pueden ver, hay unas pequeñas diferencias entre este código y el anterior:
1- Se carga un arreglo con los correos.
2- Se recorre el $result para mostrar los resultados.

Este segundo ejemplo funciona muy bien también.

El tercer intento, que es el que me causa problema difiere sólo porque el arreglo se carga desde un archivo de texto.


Código:
<?php

$emails = file("correos.txt");
require_once('smtp_validateEmail.class.php');
$sender = '[email protected]';
$SMTP_Validator = new SMTP_validateEmail();
$SMTP_Validator->debug = true;
$results = $SMTP_Validator->validate($emails, $sender);
foreach($results as $email=>$result) {
    if ($result) {
          echo 'El correo '. $email.' es valido'; 
   } else {
         echo 'El correo '. $email.' no es valido';
  }
}

?>
Sin embargo, el resultado que arroja es sólo para el último correo del archivo. Es decir, no valida todos los correos, sino solamente el último.

Como dije, yo evalué ambos arreglos y lucen identicos, tanto con

$emails = array('[email protected]', '[email protected]');

como con

$emails = file("correos.txt");

Al recorrerlos muestra exactamente lo mismo. Igual que al hacer var_dump($email)

¿Donde puede estar el error?

Yo lo que necesito es usar un .txt porque planeo verificar una lista de más de 5.000 emails.

Saludos y muchas gracias,
Luis Vásquez


PD: Les dejo el link de la clase para que prueben y saquen provecho de esto, que luce interesante.

http://www.phpclasses.org/browse/file/25142.html