Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/11/2011, 16h11   #1
Futur Membre du Club
 
Homme
Étudiant
Inscription : novembre 2011
Messages : 39
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2011
Messages : 39
Points : 19
Points : 19
Par défaut Problème de lecture .csv

Bonjour,

je n'arrive pas a comparer les emails de mon fichier avec mon tableaux de domaine (voir ci dessous)

par contre si je rentre ex : soryo@hotmail.fr en parametre dans ma fonction
celle ci va bien m'afficher @hotmail.fr
pourquoi ma fonction ne lit-elle pas mon fichier ?
pouvez vous m'aider svp ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
 
function check_domain($amail){
	$domain[] = '@hotmail.fr';
	$domain[] = '@aliceadsl.fr';
	$domain[] = '@gmail.com';
	$domain[] = '@wanadoo.fr';
	$domain[] = '@orange.fr';
	$domain[] = '@neuf.fr';
	$domain[] = '@free.fr';
	$domain[] = '@laposte.net';
	$domain[] = '@operationnelle.com';
	$domain[] = '@msn.com';
	$domain[] = '@paris.fr';
	$domain[] = '@yahoo.fr';
	$domain[] = '@yahoo.com';
	$domain[] = '@dbmail.com';
	$domain[] = '@live.fr';
	$domain[] = '@live.com';
	$domain[] = '@sfr.fr';
	$domain[] = '@aol.fr';
	$domain[] = '@caramail.fr';
	$domain[] = '@voila.fr';
	$domain[] = '@ifrance.com';
	$domain[] = '@numericable.fr';
	$domain[] = '@numericable.com';
	$domain[] = '@bbox.fr';
	$domain[] = '@alicemail.fr';
	$domain[] = '@club-internet.fr';
	$domain[] = '@info-paca.fr';
	$domain[] = '@tele2.fr';
	$domain[] = '@fnac.net';
	$domain[] = '@lemonde.fr';
	$domain[] = '@libertysurf.fr';
	$domain[] = '@lenotre.com';
	$domain[] = '@noos.fr';
	$domain[] = '@freesbee.fr';
	$domain[] = '@imode.fr';
	$domain[] = '@imode.net';
	$domain[] = '@nomade.fr';
	$domain[] = '@tiscali.fr';
	$domain[] = '@tiscali.it';
	$domain[] = '@m6net.fr';
	$domain[] = '@europarl.fr';
	$domain[] = '@europarl.net';
	$domain[] = '@worldonline.fr';
	$domain[] = '@parti-socialist.fr';
	$domain[] = '@bnpparibas.fr';
	$domain[] = '@bnpparibas.com';
	$domain[] = '@ford.fr';
	$domain[] = '@ford.com';
	$domain[] = '@force-ouvriere.fr';
	$domain[] = '@lycos.fr';
	$domain[] = '@lycos.com';
	$domain[] = '@lycos.mail';
	$domain[] = '@online.net';
	$domain[] = '@cegetel.net';
	$domain[] = '@cegetel.fr';
	$domain[] = '@avocatparis.org';
	$domain[] = '@amecspie.com';
	$domain[] = '@agriculture.gouv.fr';
	$domain[] = '@aber.ac.uk';
	$domain[] = '@aiic.net';
	$domain[] = '@ac-caen.fr';
	$domain[] = '@almacg.fr';
	$domain[] = '@almacg.com';
	$domain[] = '@awcgroup.com';
	$domain[] = '@awcgroup.fr';
	$domain[] = '@arcelormittal.com';
	$domain[] = '@atlv.net';
	$domain[] = '@atlv.fr';
	$domain[] = '@ac-bordeaux.fr';
	$domain[] = '@assemblee-nationale.fr';
	$domain[] = '@annehidalgo.fr';
	$domain[] = '@accor.com';
	$domain[] = '@accor.fr';
	$domain[] = '@ac-versaille.fr';
	$domain[] = '@amco.fr';
	$domain[] = '@astengroup.com';
	$domain[] = '@adh-presse.com';
	$domain[] = '@africa24tv,com';
	$domain[] = '@alternatives-economiques.fr';
	$domain[] = '@autun.fr';
	$domain[] = '@alicepro.fr';
	$domain[] = '@akeonet.fr';
	$domain[] = '@akeonet.com';
	$domain[] = '@apc-univ-paris7.fr';
	$domain[] = '@amg-informatique.com';
 
	foreach ($amail as $omail){
		foreach ($domain as $mycase){
			$add= strstr($omail, '@'); //add = @exemple.com quand omail = alo@exemple.com
			if (strnatcasecmp($add, $mycase) == 0){ //compare la parti @exemple.com de l'email rentre en parametre et ma tab de domaine
				echo $add . '<br />';					//afficher cet email;
			}
		}
	}
}
 
$file_name = "./bounce.2011-11-07.csv"; // fichier de retour d'erreur d'envoi de mail
 
if (file_exists($file_name)){
$file = fopen($file_name, "r"); //open du fichier .csv
$data = fread($file, filesize($file_name)); //read du .csv
$data = preg_replace("(\r\n|\n|\r)",'retour_ligne',$data); //remplace les \r\n par retour_ligne
$ligne = explode('retour_ligne', $data); //creation d'un tableau grace au delimiteur retour_ligne
$vligne = array(); //creation d'un tab
$vligne[] = explode(';', $ligne); //delimiter mon tableau par ;
	foreach ($ligne as $line){
    $vligne[] = explode(';', $line);
	}
check_domain($ligne); // fonction qui check si le domaine existe dans mon tab de domaine 
}
?>

Merci d'avance !

Cordialement,
soryo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 16h17   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 136
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 136
Points : 8 498
Points : 8 498
pas d'explode pour du CSv mais fgetcsv

ps :
Code :
1
2
3
4
$domain[] = '@hotmail.fr';
	$domain[] = '@aliceadsl.fr';
	$domain[] = '@gmail.com';
	$domain[] = '@wanadoo.fr';
Code :
1
2
3
4
5
6
$domain = array(
    '@hotmail.fr',
    '@aliceadsl.fr',
    '@gmail.com',
    '@wanadoo.fr'
);
et
Code :
1
2
 
fopen + fread + filesize = file_get_contents
http://fr2.php.net/manual/fr/functio...t-contents.php
et

Code :
preg_replace(\r\n, $file)  = file
http://fr2.php.net/manual/fr/function.file.php

...

et les foreach pour ta fonction c'est inutile utilise in_array

y'a des bases a revoir
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 10/11/2011, 09h51   #3
Futur Membre du Club
 
Homme
Étudiant
Inscription : novembre 2011
Messages : 39
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2011
Messages : 39
Points : 19
Points : 19
Je débute ! merci pour ton aide !
soryo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 17h14   #4
Futur Membre du Club
 
Homme
Étudiant
Inscription : novembre 2011
Messages : 39
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2011
Messages : 39
Points : 19
Points : 19
Il n'affiche que les adresses @alicemail.fr et non les @tiscali.fr alors qu'il y en a dans mon fichier. J'en déduis donc qu'il ne parcourt pas mon tableau.. et n'arrive pas a la comparaison. Pouvez vous m’éclairer ?


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$domain = array(
			'@alicemail.fr',
                        '@tiscali.fr'
);
 
$file_name = "./bounce.2011-11-09.csv";
$data = file_get_contents($file_name);
$file = preg_replace("(\r\n)", $file);
$ligne = explode($file, $data);
$vligne = array();
$vligne[] = explode(';', $ligne);
	foreach ($ligne as $line){
    $vligne[] = explode(';', $line);
 }
	foreach ($vligne as $etab){
		foreach ($domain as $mycase){
			if (preg_match('#5.4.4#', $etab[3])){
			$add = strstr($etab[0], '@');
				if(strcmp($add, $mycase) != 0){
					echo $etab[0] . ': email' .$add.': match - code :'.$etab[3]. '<br />';
				}
				break;
			}
		}
	}
?>
soryo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 17h16   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 136
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 136
Points : 8 498
Points : 8 498
utilise fgetcsv ...
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 17h39   #6
Futur Membre du Club
 
Homme
Étudiant
Inscription : novembre 2011
Messages : 39
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2011
Messages : 39
Points : 19
Points : 19
je ne vois pas la différence entre explode et fgetcsv, explode fonctionne dans mon cas il me sépare bien mon tableau. Crois-tu que mon problème de parcourt viens de l'utilisation d'explode ??
soryo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 17h42   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 136
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 136
Points : 8 498
Points : 8 498
Citation:
Envoyé par soryo Voir le message
je ne vois pas la différence entre explode et fgetcsv, explode fonctionne dans mon cas il me sépare bien mon tableau. Crois-tu que mon problème de parcourt viens de l'utilisation d'explode ??
on utilise d’abord les bon outils après on regarde le problème, comme ton file_get_contents + preg_match qui revient a faire un file
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 18h01   #8
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 661
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 661
Points : 5 388
Points : 5 388
En l’occurrence, dans un fichier csv, tu peux très bien avoir le caractère "séparateur" (ici le point-virgule) à l'intérieur d'un champ, le champ lui-même étant encadré par des caractères de délimitation.
En utilisant explode, tu vas découper sur tous les points virgules et tu vas garder les délimiteurs. En utilisant fgetcsv, tu auras tes champs correctement découpés.
Exemple :
Si ton fichier csv ressemble à ça :
champ_1;champ2;champ_3
1;test;"ceci est une chaine ; ceci est une autre chaine"
explode te renvoie ce tableau :
0 => 42
1 => test
2 => "ceci est une chaine
3 => ceci est une autre chaine"
alors que fgetcsv te renvoie :
0 => 42 
1 => test
2 => ceci est une chaine ; ceci est une autre chaine
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/11/2011, 18h05   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 136
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 136
Points : 8 498
Points : 8 498
et aussi les sauts de ligne sont pris en compte

Code :
1
2
3
champ_1;champ2;champ_3
1;test;"ceci est une chaine ; 
ceci est une autre chaine"
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h38.


 
 
 
 
Partenaires

Hébergement Web