Aide systeme d'envoi automatique

villersexel Messages postés 5 Date d'inscription samedi 17 octobre 2009 Statut Membre Dernière intervention 25 février 2010 - 25 févr. 2010 à 17:22
gibozsec Messages postés 318 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 11 mars 2010 - 26 févr. 2010 à 01:11
A tous,

Je suis en train de réfléchir à système qui permet à mes utilisateurs de paramétrer à quelle heure ils veulent recevoir un email avec certaines statistiques qu'ils auront définies préalablement.

Je pensais faire faire passer une crontab toutes les minutes ou toutes les 5 minutes tous jours de l'année qui lancerait un script php.
Jusque là je saisfaire.à où je seche c'est sur quoi mettre dans ce fameux script PHP. Il faut que je fasse une requête mysql qui va vérifier à quel moment on doit envoyer le fameux mail. Je sais faire s'il s'agit d'une heure précise de la journée mais si mon utilisateur a dit "je veux recevoir mes stats par email toutes les semaines le mardi à 10h" comment faire?

Une idée pour m'aiguiller?

Je m'interroge aussi sur la surcharge serveur, en effet si plusieurs dizaines d'utilisateurs demandent les mêmes stats à la même, je vais faire autant de requêtes mysql. Des idées pour optimiser?

Merci

1 réponse

gibozsec Messages postés 318 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 11 mars 2010
26 févr. 2010 à 01:11
Bonjour,

Je vais commencer par répondre à ta question sur l'estimation. Pour les statistiques, il est souvent préférable d'utiliser un système de cache quand c'est possible : tu calcule les statistiques à l'avance, tu les enregistre quelque part et quand l'utilisateur les demande, tu n'as plus qu'à lire cette cache. Ca permet de lancer la génération pendant les creux ou d'étaler sur une plus longue période.

Si ce n'est pas possible d'effectuer la génération à l'avance (par exemple si tu dois faire des stats sur une période que tu ne connais pas encore), tu peux aussi essayer de créer des tables "intermédiares". Exemple, si tu enregistre tous les accès à une page pendant la journée, tu peux lancer un script le soir qui calculera le total de visites sur cette page (total, nombre de visiteur par navigateur, par pays, ...) et qui enregistrera ces données dans une table. Sachant que le passé est immuable, les données ne changeront plus, pas besoin de refaire le calcul à chaque fois et tu auras un enregistrement par jour plutôt que 50 000 (en admétant que la page soit très fréquentée ^^). Quand un utilisateur voudra des stats sur une période tu n'auras plus qu'à additionner les valeurs de cette table, ce qui t'épargne de devoir faire des requêtes sur une grosse table.

Pour ce qui est du cron, tout dépend de ce que tu permet aux utilisateurs (s'il peuvent choisir un jour précis (lundi, mardi, chaque 1er du mois, ...), une heure précise, plusieurs fois par jour, ...). En admettant qu'ils aient libre choix, tu pourrais calculer la date de prochain lancement (par exemple s'il veut tous les mardi à 10H, tu calcule la date du prochain mardi 10H) et de l'enregistrer quelque part. Ensuite, quand ton script se lance il suffit de vérifier si la date de prochain lancement est dans le passé et si oui, envoyer le mail et mettre à jour la date du prochain envoi.

J'espère que ça répond à tes questions, sinon n'hésite pas à préciser ta demande.
Grrrrrrrrrrr
0
Rejoignez-nous