Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/11/2010, 22h02   #1
Futur Membre du Club
 
Inscription : mai 2008
Messages : 52
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 52
Points : 16
Points : 16
Par défaut Notifications périodique avec répétition

Bonjour,

Je suis en train de designer une application qui doit envoyer des notifications périodiques.

Je vais créer un CRON job qui va exécuter chaque minute un script PHP qui va chercher dans une base de données les notifications à envoyer :

  1. Connection à la DB pour trouver les notifications
  2. Mettre un flag ou déterminer la prochaine date pour chaque notification
  3. Envoyer les notifications

Je voudrais savoir si vous avez des recommandations pour la syntaxe des notifications périodiques ou s'il existe une librairie qui gère ca. Pour illustrer le problème, prenons une notification envoyée toutes les heures.

Quel format adopté pour signifer le "toutes les heures". Existe-t-il quelque chose qui permet de comparer l'heure actuelle avec ce format ?


Si vous avez des idées je suis preneur. Merci d'avance.
Arkante est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2010, 22h17   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
C'est bizarre ta question. Tu veux utiliser cron comme "lanceur de tache plannifiée" la seule chose à faire c'est de lui donner le point d'entrée du script et de lui donner la bonne fréquence d'exécution.

Tu auras donc deux scripts ou un script avec des paramètres différents, ou deux scripts différents mais qui chargeront des bibliothèques communes, l'un qui s'execute toute les minutes (et donc qui est dure moins d'une minute ) l'autre qui est executé toutes les heures et qui n'est pas pertubé par l'action des scripts à la minute.

Décharge toi de la gestion du temps sur ton lanceur de tache. Du coup la syntaxe sera celle de CRON dans ton exemple

Pour le coté notification s'il s'agit d'une notification à un humain, par l'intermédiaire d'un mail.... d'abord il ne va jamais les lire parce qu'il y en aura trop il ne faudrait notifier que les évènements exceptionnels (indisponibilité serveur par exemple) mais dès que ceux-ci sont détectés et non lors d'une routine planifiée et encore une seule fois.

Pour ce genre de travaux, un log est bien mieux, s'il est bien dimensionné. Tu as des moteurs MySQL a disposition et des options d'insertions qui promettent des choses interessantes pour celà, sinon un bête syslog...
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2010, 23h26   #3
Futur Membre du Club
 
Inscription : mai 2008
Messages : 52
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 52
Points : 16
Points : 16
Bonjour,

Je te remercie pour ton aide mais ma question ne porte pas sur la Business Logic qui est parfaitement adaptée aux besoins du projet. Je ne reviens donc pas sur ton avis sur les mail et log.

Je vais cependant éclaircir un point qui n'était peut-être pas clair dans mon précédent post.

L'utilisateur choisit ses notifications en fréquence avec comme précision la minute. Les possibilités, bien que dénombrables, sont trop nombreuses pour faire l'objet de CRON job séparés. Il ne serait pas pertinent d'écrire des milliers de lignes dans le CRONTAB.
Arkante est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2010, 17h36   #4
Futur Membre du Club
 
Inscription : mai 2008
Messages : 52
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 52
Points : 16
Points : 16
Bonjour,

Voici la solution que je vais appliquer, si ca peut aider qqu'un dans le futur :
  1. Créer une table pour les notifications avec un champ "cron" (syntaxe cron pour la fréquence) et un champ "next" (prochaine fois que l'on doit notifier)
  2. Toutes les minutes, je fetch les notifications ou "next" est proche de time()
  3. Je calcule avec un CRON Parser la prochaine date et update "next"
Arkante est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2010, 18h40   #5
Membre éclairé
 
Inscription : octobre 2004
Messages : 235
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 235
Points : 360
Points : 360
J'ai du mal à voir ce qu'il y a de vraiment compliqué en fait : un champ date_time ou timestamp ne fait pas l'affaire ?

Le CRONPARSER me semble compliqué non ?

Pour chaque notification configurée, tu enregistres l'intervalle souhaité dans un champs "interval" et l'heure/minute de la prochaine mise à jour dans un champ "prochaine_maj".

Toutes les minutes, tu fetch les notifications pour prochaine_maj < NOW(); et tu update prochaine_maj en ajoutant l'interval en minute avec les fonctions de DATE de mysql.
Joker-eph est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 17h04   #6
Futur Membre du Club
 
Inscription : mai 2008
Messages : 52
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 52
Points : 16
Points : 16
En effet cette solution marche si les intervalles sont fixes. La syntaxe CRON permet de créer des fréquences à intervalles variables.

Par exemple : notification lundi et mardi chaque semaine. L'intervalle de lundi à mardi est différent de celui de mardi à lundi. Ta proposition ne marche pas.

Encore une fois, je n'ai pas expliqué toute la Business Logic mais il y a des raisons pour lesquelles j'ai fait ces choix.
Arkante est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 17h10   #7
Membre éclairé
 
Inscription : octobre 2004
Messages : 235
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 235
Points : 360
Points : 360
Ok, il fallait l'expliquer d'entrée :-)

Tu avais écris que voulais des notifications pour des intervalles exprimés en minutes, du genre : "toutes les heures", du coup pas facile d'imaginer les "non-dit"
Joker-eph est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h34.


 
 
 
 
Partenaires

Hébergement Web