Foros del Web » Programando para Internet » PHP »

Problema con array cargado desde archivo

Estas en el tema de Problema con array cargado desde archivo en el foro de PHP en Foros del Web. 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á ...
  #1 (permalink)  
Antiguo 31/01/2011, 20:57
Avatar de luisvasquez  
Fecha de Ingreso: diciembre-2003
Ubicación: Venezuela
Mensajes: 879
Antigüedad: 20 años, 4 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
  #2 (permalink)  
Antiguo 31/01/2011, 21:31
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con array cargado desde archivo

Que es lo que contiene adentro el archivo "correos.txt"?
  #3 (permalink)  
Antiguo 31/01/2011, 21:40
Avatar de luisvasquez  
Fecha de Ingreso: diciembre-2003
Ubicación: Venezuela
Mensajes: 879
Antigüedad: 20 años, 4 meses
Puntos: 6
Respuesta: Problema con array cargado desde archivo

Cita:
Iniciado por GatorV Ver Mensaje
Que es lo que contiene adentro el archivo "correos.txt"?
Gracias GatorV,

El archivo txt contiene esto.

[email protected]
[email protected]
[email protected]
[email protected]

Saludos,
Luis
  #4 (permalink)  
Antiguo 31/01/2011, 21:59
Avatar de luisvasquez  
Fecha de Ingreso: diciembre-2003
Ubicación: Venezuela
Mensajes: 879
Antigüedad: 20 años, 4 meses
Puntos: 6
Respuesta: Problema con array cargado desde archivo

Acabo de ver algo adicional. La clase descarta cualquier dirección de correo que tenga un error de sintaxis o cuyo dominio no exista.

Sin embargo, he cambiado los [email protected] por direcciones @hotmail.com, yahoo.com, etc y el problema persiste. Cuando uso $emails = array('[email protected]', '[email protected]'); funciona bien y cuando uso $emails = file("correos.txt"); sólo muestra el resultado del último correo del archivo.

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

Solucionado!!!

Aunque el archivo NO contiene espacios en blanco, por alguna razón, al cargar cada línea en un arreglo se agrega un espacio al final. La clase no reconoce el dominio con ese espacio y lo ignora.

Apliqué lo siguiente:

// Cargo el archivo en un arreglo y luego lo descargo en otro haciendo trim.

$archivo_emails = file("correos.txt");
for( $i = 0; $i < count($archivo_emails); $i ++)
{
$emails[$i] = trim($archivo_emails[$i]);
}

Saludos,
Luis
  #6 (permalink)  
Antiguo 31/01/2011, 23:01
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 14 años, 6 meses
Puntos: 17
Respuesta: Problema con array cargado desde archivo

Mejor usa la constante FILE_IGNORE_NEW_LINES, con eso te ahorras el trim y el ciclo
Código PHP:
Ver original
  1. $archivo_emails = file("correos.txt",FILE_IGNORE_NEW_LINES);
__________________
Saludos.
  #7 (permalink)  
Antiguo 31/01/2011, 23:05
Avatar de luisvasquez  
Fecha de Ingreso: diciembre-2003
Ubicación: Venezuela
Mensajes: 879
Antigüedad: 20 años, 4 meses
Puntos: 6
Respuesta: Problema con array cargado desde archivo

Cita:
Iniciado por JaimeSavines Ver Mensaje
Mejor usa la constante FILE_IGNORE_NEW_LINES, con eso te ahorras el trim y el ciclo
Código PHP:
Ver original
  1. $archivo_emails = file("correos.txt",FILE_IGNORE_NEW_LINES);

Excelente...probaré esta forma, porque yo lo hice "a pie".

Saludos y gracias,
Luis Vásquez

Etiquetas: Ninguno
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 16:08.