Bonsoir tout le monde,
Habituellement, je m'en sors pas trop mal, mais là, j'ai besoin de votre expérience. Je suis entrain de me faire un petit système en local d'e-mailing que je compte encore améliorer bien sûr. Quand j'envoie 3 courriels, le script se déroule pas trop mal (enfin, j'ai le sablier de la souris qui s'énerve un peu trop). Par contre, quand j'envoie plus de 4/5 courriels, j'ai le message :
Fatal error : Maximum execution time of 30 seconds exceeded ...
Je sais qu'il existe la commande :
ini_set("max_execution_time",0); //temps infini d'exécution
Je souhaiterai que vous supervisiez mon script et me dire si je n'ai pas commis de grossières erreurs.
config_mailing.php :
<?php
error_reporting(E_ALL ^ E_NOTICE);
setlocale(LC_TIME, "french", "fr_FR");
define("REP_SOURCES","sources/");
define("REP_LIBRAIRIES","librairies/");
define("REP_LANGUAGE","language/");
define("GABARIT","gabarit_courriel.html"); // xhtml 1.0 transitional - iso8859-1- css interne - mise en page old and bad school
define("ALT_GABARIT","lettre_alternative.txt");
define ("LANGUE","fr");
define("SMTP_FAI","smtp.fai.ext");
define("EXPEDITEUR_NS","prenom nom");
define("EXPEDITEUR","[email protected]");
define("DESTINATAIRES","test.csv");
function __autoload($class){
require_once REP_SOURCES.REP_LIBRAIRIES."class.".$class.".php";
}
?>
envoi.php
<?php
require_once "config_mailing.php";
try{
//initialisation
$dateEnvoi = strftime("%d %B %Y");
$gabarit = file_get_contents(REP_SOURCES.GABARIT);
$texteAlternatif = file_get_contents(REP_SOURCES.ALT_GABARIT);
$sujet = "Un sujet de courriel";
//récupération de la liste des destinataires
//(array à deux dimensions et clefs associatives au deuxième niveau)
$listeAssociations = new csvReader(REP_SOURCES.DESTINATAIRES);
$destinataires = $listeAssociations->getDonnees();
$emailing = new PHPmailer();
$cheminLangage = REP_SOURCES.REP_LIBRAIRIES.REP_LANGUAGE;
//config envoi
$emailing->IsSMTP();
$emailing->IsHTML(true);
$emailing->Host = SMTP_FAI;
$emailing->SetLanguage("fr",$cheminLangage);
$emailing->SMTPAuth = false;
$emailing->SMTPKeepAlive = true;
$emailing->FromName = EXPEDITEUR_NS;
$emailing->From = EXPEDITEUR;
//parcour la liste
$enregistrement = 1;
foreach($destinataires as $elements){
// regroupe les divers éléments du courriel et
// réinitialise le tout pour le prochain enregistrement (!)
$courriel = array($sujet, $gabarit, $texteAlternatif);
foreach($elements as $attribut => $valeur){
$search = "__".strtoupper($attribut)."__";
//remplace mot clef
$courriel = str_replace($search,trim($valeur),$courriel);
//ajout de la date en Français
$courriel = str_replace("__DATE__",$dateEnvoi,$courriel);
//détermination des coordonnées
switch($attribut){
case "courriel" :
$courrielDestinataire = trim($valeur);
break;
case "prenom" :
$prenomDestinataire = trim($valeur);
break;
case "nom" :
$nomDestinataire = trim($valeur);
break;
}
$destinataireNS = $prenomDestinataire." ".$nomDestinataire;
}
//rend invisible les mots clefs dans le cas où
//un enregistrement n'aurait pas de concordance (!)
$pattern = "#\b[_]{2}[A-Z]{2,}[_]{2}\b#";
$courriel = preg_replace($pattern,"",$courriel);
$emailing->Subject = $courriel[0];
$emailing->Body = $courriel[1];
$emailing->AltBody = $courriel[2];
if(empty($courrielDestinataire))
throw new Exception("impossible de récupérer le courriel d'un destinataire.");
$emailing->AddAddress($courrielDestinataire,$destinataireNS);
if(!$emailing->Send()){
throw new Exception("envoi impossible");
}else{
$resultatEnvoi[] = "<strong>".stftime("%d %B %Y %H:%M:%S")." :</strong><br />";
$resultatEnvoi[] = $enregistrement." : courriel envoyé à ".$destinataireNS." (".$courrielDestinataire.")<hr />";
$enregistrement++;
}
//supprime tout information pour le prochain envoi
$emailing->ClearAddresses();
}
echo $courriel[1];
echo implode("<br />",$resultatEnvoi);
//destruction de l'objet
unset($emailing);
}catch(Exception $e){
echo $e->getMessage();
}
?>
Mes questions sont :
Quel est l'avantage et l'inconvénient d'un temps limité et illimité ?
Y'a t'il un rapport avec la gestion de la mémoire ?
C'est mon premier emailing. Je ne connais pas vraiment le comportement d'une machine. Comme je l'ai dit précédemment, j'ai le sablier qui titille. Est ce normal ? J'ai pensé à faire un système qui endormirait le script. J'ai pensé à sleep(). Avec cette fonction, j'ai quand même le « Fatal error: Maximum execution time »
Je sais qu'on a pas l'assurance que le destinataire ait le courriel. J'ai pensé à inclure dans le fichier csv, un mail à mon attention toutes les n fois. Il y a t'il des petites astuces supplémentaires ?
Je vous remercie par avance de m'accorder un peu de votre temps pour mon petit soucis.
Bon code

Bonsoir tout le monde,
Habituellement, je m'en sors pas trop mal, mais là, j'ai besoin de votre expérience. Je suis entrain de me faire un petit système en local d'e-mailing que je compte encore améliorer bien sûr. Quand j'envoie 3 courriels, le script se déroule pas trop mal (enfin, j'ai le sablier de la souris qui s'énerve un peu trop). Par contre, quand j'envoie plus de 4/5 courriels, j'ai le message :
[quote="php"]
Fatal error : Maximum execution time of 30 seconds exceeded ...
[/quote]
Je sais qu'il existe la commande :
[php]
ini_set("max_execution_time",0); //temps infini d'exécution
[/php]
Je souhaiterai que vous supervisiez mon script et me dire si je n'ai pas commis de grossières erreurs.
config_mailing.php :
[php]
<?php
error_reporting(E_ALL ^ E_NOTICE);
setlocale(LC_TIME, "french", "fr_FR");
define("REP_SOURCES","sources/");
define("REP_LIBRAIRIES","librairies/");
define("REP_LANGUAGE","language/");
define("GABARIT","gabarit_courriel.html"); // xhtml 1.0 transitional - iso8859-1- css interne - mise en page old and bad school
define("ALT_GABARIT","lettre_alternative.txt");
define ("LANGUE","fr");
define("SMTP_FAI","smtp.fai.ext");
define("EXPEDITEUR_NS","prenom nom");
define("EXPEDITEUR","
[email protected]");
define("DESTINATAIRES","test.csv");
function __autoload($class){
require_once REP_SOURCES.REP_LIBRAIRIES."class.".$class.".php";
}
?>
[/php]
envoi.php
[php]
<?php
require_once "config_mailing.php";
try{
//initialisation
$dateEnvoi = strftime("%d %B %Y");
$gabarit = file_get_contents(REP_SOURCES.GABARIT);
$texteAlternatif = file_get_contents(REP_SOURCES.ALT_GABARIT);
$sujet = "Un sujet de courriel";
//récupération de la liste des destinataires
//(array à deux dimensions et clefs associatives au deuxième niveau)
$listeAssociations = new csvReader(REP_SOURCES.DESTINATAIRES);
$destinataires = $listeAssociations->getDonnees();
$emailing = new PHPmailer();
$cheminLangage = REP_SOURCES.REP_LIBRAIRIES.REP_LANGUAGE;
//config envoi
$emailing->IsSMTP();
$emailing->IsHTML(true);
$emailing->Host = SMTP_FAI;
$emailing->SetLanguage("fr",$cheminLangage);
$emailing->SMTPAuth = false;
$emailing->SMTPKeepAlive = true;
$emailing->FromName = EXPEDITEUR_NS;
$emailing->From = EXPEDITEUR;
//parcour la liste
$enregistrement = 1;
foreach($destinataires as $elements){
// regroupe les divers éléments du courriel et
// réinitialise le tout pour le prochain enregistrement (!)
$courriel = array($sujet, $gabarit, $texteAlternatif);
foreach($elements as $attribut => $valeur){
$search = "__".strtoupper($attribut)."__";
//remplace mot clef
$courriel = str_replace($search,trim($valeur),$courriel);
//ajout de la date en Français
$courriel = str_replace("__DATE__",$dateEnvoi,$courriel);
//détermination des coordonnées
switch($attribut){
case "courriel" :
$courrielDestinataire = trim($valeur);
break;
case "prenom" :
$prenomDestinataire = trim($valeur);
break;
case "nom" :
$nomDestinataire = trim($valeur);
break;
}
$destinataireNS = $prenomDestinataire." ".$nomDestinataire;
}
//rend invisible les mots clefs dans le cas où
//un enregistrement n'aurait pas de concordance (!)
$pattern = "#\b[_]{2}[A-Z]{2,}[_]{2}\b#";
$courriel = preg_replace($pattern,"",$courriel);
$emailing->Subject = $courriel[0];
$emailing->Body = $courriel[1];
$emailing->AltBody = $courriel[2];
if(empty($courrielDestinataire))
throw new Exception("impossible de récupérer le courriel d'un destinataire.");
$emailing->AddAddress($courrielDestinataire,$destinataireNS);
if(!$emailing->Send()){
throw new Exception("envoi impossible");
}else{
$resultatEnvoi[] = "<strong>".stftime("%d %B %Y %H:%M:%S")." :</strong><br />";
$resultatEnvoi[] = $enregistrement." : courriel envoyé à ".$destinataireNS." (".$courrielDestinataire.")<hr />";
$enregistrement++;
}
//supprime tout information pour le prochain envoi
$emailing->ClearAddresses();
}
echo $courriel[1];
echo implode("<br />",$resultatEnvoi);
//destruction de l'objet
unset($emailing);
}catch(Exception $e){
echo $e->getMessage();
}
?>
[/php]
Mes questions sont :
Quel est l'avantage et l'inconvénient d'un temps limité et illimité ?
Y'a t'il un rapport avec la gestion de la mémoire ?
C'est mon premier emailing. Je ne connais pas vraiment le comportement d'une machine. Comme je l'ai dit précédemment, j'ai le sablier qui titille. Est ce normal ? J'ai pensé à faire un système qui endormirait le script. J'ai pensé à sleep(). Avec cette fonction, j'ai quand même le « Fatal error: Maximum execution time »
Je sais qu'on a pas l'assurance que le destinataire ait le courriel. J'ai pensé à inclure dans le fichier csv, un mail à mon attention toutes les n fois. Il y a t'il des petites astuces supplémentaires ?
Je vous remercie par avance de m'accorder un peu de votre temps pour mon petit soucis.
Bon code :)