Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1800 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Savoir quand une fonction a été appelé pour la derniere fois

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Savoir quand une fonction a été appelé pour la derniere fois

n°1039749
veryfree
Posté le 08-04-2005 à 10:15:13  profilanswer
 

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

mood
Publicité
Posté le 08-04-2005 à 10:15:13  profilanswer
 

n°1039751
FlorentG
Posté le 08-04-2005 à 10:17:00  profilanswer
 

Tu déclare ta variable comme ça, à l'arrache, et dans une fonction t'y fait référence via le tableau $GLOBALS

n°1039753
ratibus
Posté le 08-04-2005 à 10:17:31  profilanswer
 

Code :
  1. static $lastCall;
  2. if(!isset($lastCall)) { // Premier appel
  3.     $lastCall=time();
  4. } else { // Appels suivants
  5. }

n°1039755
ratibus
Posté le 08-04-2005 à 10:18:16  profilanswer
 

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 ?  :whistle:

n°1039760
skeye
Posté le 08-04-2005 à 10:26:47  profilanswer
 

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()...:o


---------------
Can't buy what I want because it's free -
n°1039767
FlorentG
Posté le 08-04-2005 à 10:34:13  profilanswer
 

ratibus a écrit :

T'as une solution encore plus crade ?  :whistle:


En même temps c'est du PHP, hein :D

n°1039775
veryfree
Posté le 08-04-2005 à 10:39:00  profilanswer
 

ratibus a écrit :

Code :
  1. static $lastCall;
  2. if(!isset($lastCall)) { // Premier appel
  3.     $lastCall=time();
  4. } else { // Appels suivants
  5. }



 
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 :jap:


Message édité par veryfree le 08-04-2005 à 10:42:28
n°1039784
skeye
Posté le 08-04-2005 à 10:44:52  profilanswer
 

veryfree a écrit :

skeye>>je vais regarder dans la doc, j'ai jamais fait ce genre de chose.
 
Si t as un petit exemple en attendant :D  
 
Thanx :jap:


 
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...:D
 
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...[:joce]
Ou alors tu raffines encore, et ta fonction à observer est un membre d'un objet qui contient une liste d'objets à notifier...[:ddr555]
 
...et d'ailleurs c'est dans cet objet-là que se trouveraientt la fonction register et unregister...[:joce]


Message édité par skeye le 08-04-2005 à 10:46:12

---------------
Can't buy what I want because it's free -
n°1039794
veryfree
Posté le 08-04-2005 à 10:51:50  profilanswer
 

:sweat:  
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  [:mmmfff]  

n°1039814
skeye
Posté le 08-04-2005 à 11:02:29  profilanswer
 

veryfree a écrit :

:sweat:  
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  [:mmmfff]


bah bricole, hein, c'était juste pour faire mumuse hein...;)


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 08-04-2005 à 11:02:29  profilanswer
 

n°1039821
ratibus
Posté le 08-04-2005 à 11:07:32  profilanswer
 

Chez moi ça marche ceci :

Code :
  1. <?php
  2. function test() {
  3. static $lastCall; 
  4.    
  5.     if(!isset($lastCall)) { // Premier appel
  6.         $lastCall=time();
  7.         echo "Premier appel ($lastCall)";
  8.     } else { // Appels suivants
  9.      echo "Appel suivant ($lastCall)";
  10.     }
  11. }
  12. test();
  13. test();
  14. ?>


 
J'utilise cette méthode pour mon design pattern Singleton en PHP4 ;)


Message édité par ratibus le 08-04-2005 à 11:09:22
n°1040063
veryfree
Posté le 08-04-2005 à 14:17:38  profilanswer
 

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 :/


Message édité par veryfree le 08-04-2005 à 14:18:29
n°1040068
skeye
Posté le 08-04-2005 à 14:18:51  profilanswer
 

veryfree a écrit :

En fait, je pensait qu'avec une variable static, tout les clients qui consultent la page en question partageai sa valeur.
 
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 :/


 
à l'envoi du mail stocke la date dans une table à la con dans ta base de données et vérifie avant chaque envoi? :??:


---------------
Can't buy what I want because it's free -
n°1040162
veryfree
Posté le 08-04-2005 à 14:53:02  profilanswer
 

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 [:ddr555]
 
 
je crois que je vais passer par un fichier en fait ;)

n°1040165
FlorentG
Posté le 08-04-2005 à 14:53:34  profilanswer
 

Voilà, j'allais proposer un beau fichier :)

n°1040203
ratibus
Posté le 08-04-2005 à 15:09:46  profilanswer
 

+1 pour le fichier

n°1040411
veryfree
Posté le 08-04-2005 à 16:24:42  profilanswer
 

[:volta]

n°1042623
veryfree
Posté le 11-04-2005 à 09:50:21  profilanswer
 

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 :
  1. function canSend($min){
  2.  if(!$fp=@fopen('file.txt', 'r+')){
  3.   return true;
  4.  }
  5.  $lastCall=fgets($fp, 1024);
  6.  if(time()-$lastCall>($min*60)){
  7.   fseek($fp, 0);
  8.   fputs($fp, time());
  9.   $sendOk=true;
  10.  }else{
  11.   $sendOk=false;
  12.  }
  13.  fclose($fp);
  14. return $sendOk;
  15. }


Message édité par veryfree le 11-04-2005 à 09:50:43
n°1042769
KangOl
Profil : pointeur
Posté le 11-04-2005 à 12:11:45  profilanswer
 

flock :o


---------------
Nos estans firs di nosse pitite patreye...
n°1042922
veryfree
Posté le 11-04-2005 à 13:48:51  profilanswer
 

o_O


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Savoir quand une fonction a été appelé pour la derniere fois

 

Sujets relatifs
Utilisation de la fonction timecherche fonction pour lire&modifier la résolution d'écran sous windows
Comment reprogrammer la fonction strfry a partir dfe pointeur?[MFC] recherche de nom de fonction pour éviter le clipping
Fonction avec AccessProbleme avec la fonction exif_read_data()
Comment saisir et controler des valeurs ds une fonction, et ...DAO et fonction VBA
Comment reutiliser des variables dans d'autre fonction??Comment rajouter la fonction payement en ligne sur un site Web
Plus de sujets relatifs à : Savoir quand une fonction a été appelé pour la derniere fois


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)