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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.