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