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 :
Si quelqu'un voit pourquoi ce script bouffe trop de mémoire ?
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); } }
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.
Partager