Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Autres composants
Autres composants Forum de support sur les autres composants de Zend Framework.
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 08/08/2007, 16h02   #1
Invité régulier
 
Inscription : juillet 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 15
Points : 8
Points : 8
Par défaut Problème envoi Mail -> Fatal error: Allowed memory size of 8388608 bytes exhausted

Bonjour à tous,

Voila je suis en train de développer un systeme de newsletter.
Pour cela j'utilise les classes de Zend.
Ce matin j'ai fais un test sur une db de 7000 mails. Mon souci c'est qu'à partir de 400 mails j'ai un erreur du style Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 156 bytes) in /Zend/Mail/Protocol/Abstract.php

Voici une parti de mon code :

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
	require_once 'Zend/Mail.php';
	require_once 'Zend/Mail/Transport/Smtp.php';
	$config = array(
					'username' => $result['smtp_user'],
					'password' => $result['smtp_pass']);
 
	$tr = new Zend_Mail_Transport_Smtp('localhost', $config);
	Zend_Mail::setDefaultTransport($tr);
 
 
	foreach ( $aEmail as $key => $email)  {
 
                      // redaction du message
 
			if (EmailOK($email['abo_email'])) {
 
				$mail = new Zend_Mail ();
				$mail->setFrom ($result['sender_email'], $result['sender_name']);
				$mail->addTo ($email['abo_email']);
				$mail->setSubject ($result['sujet']);
				$mail->setBodyHtml ($message);
				if($mail->send ()) {
					$var = 'ok -> envoi : '.$email['abo_email'].' ';
					$time = date("H:i:s");					
					$ligne = $var.";".date("d/m/Y")." ".date("H:i:s")."\n";  
					$fp = fopen ("log/log_envoi.txt", "a+"); 
					/* écriture de la ligne ŕ concurrence de 1024 caractčres */
					fwrite($fp, $ligne, 1024);
					/* fermeture du fichier */
					fclose($fp);
 
					unset($mail); 	
 
				}
				else {
					$var = 'error -> envoi : '.$email['abo_email'].' '; 
					$time = date("H:i:s");
					$ligne = $var.";".date("d/m/Y")." ".date("H:i:s")."\n";  
					/* écriture de la ligne ŕ concurrence de 1024 caractčres */
					$fp = fopen ("log/log_envoi.txt", "a+"); 
					fwrite($fp, $ligne, 1024);
					/* fermeture du fichier */
					fclose($fp); 	
				}
			}
			else {
 
				$var = 'invalide email -> '.$email['abo_email'].' '; 
				$time = date("H:i:s");
				$ligne = $var.";".date("d/m/Y")." ".date("H:i:s")."\n";  
				/* écriture de la ligne ŕ concurrence de 1024 caractčres */
				$fp = fopen ("log/log_envoi.txt", "a+"); 
				fwrite($fp, $ligne, 1024);
				/* fermeture du fichier */
				fclose($fp); 
			}
 
	}
Si quelqu'un voit pourquoi ce script bouffe trop de mémoire ?
Sachant que j'ai déjà testé en modifiant le memory limit avec 160M mais meme avec cette limit le script arrive à plus de 160M, ce qui génant car ça bouffe pas mal de bande passante.

Il y a t il moyen de libérer de l'espace mémoire lors de l'exécution du script ??

Merci d'avance.
Anardil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2007, 18h36   #2
Membre du Club
 
Inscription : mai 2006
Messages : 84
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 84
Points : 44
Points : 44
Envoyer un message via ICQ à Turtle_fr Envoyer un message via AIM à Turtle_fr Envoyer un message via Skype™ à Turtle_fr
Hello

tu as tourvé une solution à ton pb ?
Je suis bloqué au même niveau que toi dès que ma boucle sur ma base de mails commence à avoisiner les 300/400 mails...

Merci d'avance
Turtle_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2007, 18h55   #3
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Il faut temporiser l'envoi, sans quoi tu vas faire tomber le serveur de mails. Essaie de faire des envois par 200 mails par exemple : charge le script (qui envoie 200 mails), fais une pause (Meta/Refresh en HTML par exemple) puis relance le script, etc.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2007, 19h08   #4
Membre du Club
 
Inscription : mai 2006
Messages : 84
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 84
Points : 44
Points : 44
Envoyer un message via ICQ à Turtle_fr Envoyer un message via AIM à Turtle_fr Envoyer un message via Skype™ à Turtle_fr
ok merci pour le conseil
je vais tester !
Turtle_fr est dé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 10h39.


 
 
 
 
Partenaires

Hébergement Web