Savoir quand une fonction a été appelé pour la derniere fois - PHP - Programmation
Marsh Posté le 08-04-2005 à 10:17:00
Tu déclare ta variable comme ça, à l'arrache, et dans une fonction t'y fait référence via le tableau $GLOBALS
Marsh Posté le 08-04-2005 à 10:17:31
Code :
|
Marsh Posté le 08-04-2005 à 10:18:16
FlorentG a écrit : Tu déclare ta variable comme ça, à l'arrache, et dans une fonction t'y fait référence via le tableau $GLOBALS |
T'as une solution encore plus crade ?
Marsh Posté le 08-04-2005 à 10:26:47
Je verrais bien une classe pour faire ça...avec un tableau associatif contenant le nom de la fonction et la date, et des fonctions register()/unregister()/notify()...
Marsh Posté le 08-04-2005 à 10:34:13
ReplyMarsh Posté le 08-04-2005 à 10:39:00
ratibus a écrit :
|
salut,
je viens d'essayer et il considere toujours $lastCall comme non initialisé, la partie " du else est jamais executé
skeye>>je vais regarder dans la doc, j'ai jamais fait ce genre de chose.
tu peux te passer de static avec ta solution ?
Thanx
Marsh Posté le 08-04-2005 à 10:44:52
veryfree a écrit : skeye>>je vais regarder dans la doc, j'ai jamais fait ce genre de chose. |
Bah un truc con...dans la fonction register() tu crées une ligne pour la fonction dans ton tableau associatif, et dans le corps des fonctions enregistrées tu colles un appel à notify() à la fin, qui mettra à jour la date...
Bon, c'est pas encore ce qui se fait de plus joli hein...ça t'oblige toujours à avoir une instance de ton objet accessible partout...
Ou alors tu raffines encore, et ta fonction à observer est un membre d'un objet qui contient une liste d'objets à notifier...
...et d'ailleurs c'est dans cet objet-là que se trouveraientt la fonction register et unregister...
Marsh Posté le 08-04-2005 à 10:51:50
faut savoir que cette fonction sera appelée plusieurs fois par sec en cas d'incident et si c'est trop lourd ca pourrais faire tomber nos serveurs
jprefererai bricoler avec un static moi
Marsh Posté le 08-04-2005 à 11:02:29
veryfree a écrit : |
bah bricole, hein, c'était juste pour faire mumuse hein...
Marsh Posté le 08-04-2005 à 11:07:32
Chez moi ça marche ceci :
Code :
|
J'utilise cette méthode pour mon design pattern Singleton en PHP4
Marsh Posté le 08-04-2005 à 14:17:38
En fait, je pensait qu'avec une variable static, tout les clients qui consultent la page en question partageai sa valeur.
ratibus>> la si on actualise, lastCall est reinitialisé...
en fait je vous explique le probleme ce sera plus simple:
j'ai une fonction alert appelé lorsqu'il y a une erreur d'execution dans nos scripts.
cele ci envois un mail.
Pour eviter d'envoyer des milliers de mails pour la meme erreur, je verifie qu'aucun mails d'alerte n'a été envoyé dans les 5 dernieres minutes, si c'est le cas, j'ignore l'alerte.
Ce systeme n'a pas été developpé par moi et acutellement on recois jusqu'a 3000 mails sur la journée et ca plombe nos serveurs quoi
j'espere que c'est plus clair
Marsh Posté le 08-04-2005 à 14:18:51
veryfree a écrit : En fait, je pensait qu'avec une variable static, tout les clients qui consultent la page en question partageai sa valeur. |
à l'envoi du mail stocke la date dans une table à la con dans ta base de données et vérifie avant chaque envoi?
Marsh Posté le 08-04-2005 à 14:53:02
le probleme c'est que la base peut etre inaccessible au moment ou cette fonction est appelé.
C'est bien la son role en fait, envoyé un mail a l'admin quand mysql repond plus
je crois que je vais passer par un fichier en fait
Marsh Posté le 11-04-2005 à 09:50:21
juste une petite precision avant de mettre ca en ligne.
imaginons que la page est appelé 15 fois sur la meme sec.
il se passe quoi avec le fopen ?
y a un acces synchronisé dessus ?
voila la fonction :
Code :
|
Marsh Posté le 11-04-2005 à 12:11:45
flock
Marsh Posté le 08-04-2005 à 10:15:13
bonjour,
j'aimerait executer le contenu d'une fonction uniquement si elle a pas été appelé depuis x secs.
j'ai donc pensé a utiliser une variable static mais on ne peux pas faire ce genre de chose:
static $lastCall=time();
vous voyez comment je peux faire pour résoudre mon probleme ?
en evitant d'avoir a passé par une BDD.
Merci