Probleme de date avec php (antidatage ?)

Probleme de date avec php (antidatage ?) - PHP - Programmation

Marsh Posté le 13-12-2005 à 11:13:12    

Bonjour,
 
j'ai un soucis de date très bizarre, dans un forum punbb mais visiblement le probleme ne lui est pas spécifique.
 
je place le décor :  
 
punbb 1.2.6 avec pas mal de modifs un peu partout, mais le module post.php est identique à l'original
controle du flood (flood interval) à zéro
 
lors du post d'un message, il arrive que j'ai le message "intervalle minimum de 0 secondes entre deux messages". Alors que le flood interval est déjà à zero. pour contourner ce probleme, j'ai ajouté une clause au test d'antiflood :
 
 
passage de  
 

Code :
  1. if (!$pun_user['is_guest'] && !isset($_POST['preview']) && $pun_user['last_post'] != ''
  2.  && (time() - $pun_user['last_post']) < $pun_user['g_post_flood'])


à

Code :
  1. if (!$pun_user['is_guest'] && !isset($_POST['preview']) && $pun_user['last_post'] != ''
  2.  && intval($pun_user['g_post_flood']) != 0
  3.  && (time() - $pun_user['last_post']) < $pun_user['g_post_flood'])


 
Avant meme de regarder la différence entre le time() et la date de dernier post, je vérifie si le flood interval est nul ou pas. Cette solution me paraissait bonne, mais j'ai vite déchanté.
Ayant enlevé cette protection, je me suis rendu compte d'un probleme.
 
Certains des posts sont "antidatés". je m'explique : un post d'id 425 est daté de 18h15, et un post d'id 426 est lui daté de 18h14 !
C'est théoriquement impossible. En gros, lors du post, la date retournée par la fonction time() est "future". lors du test d'antiflood :  
 

Code :
  1. time() - $pun_user['last_post']) < $pun_user['g_post_flood']


ici, le test est passant c'est parceque time() - $pun_user['last_post']) est inférieur à zero (car $pun_user['g_post_flood'] = 0, j'ai vérifié douze fois).
or dans l'opération

Code :
  1. time() - $pun_user['last_post']


time() est _théoriquement_ plus grand que $pun_user['last_post']. ou au pire égal si on est très très très très rapide.
Mais il est tout à fait impossible que la valeur de $pun_user['last_post'] soit supérieure à la valeur rendue par time() étant donné que $pun_user['last_post'] a été renseigné par time() précédemment.
 
et pourtant c'est ce qui m'arrive...
 
j'ai vérifié dans la base, ce n'est pas une erreur du script d'affichage des topics.
 
Quelqu'un à déjà eu affaire  àce genre de soucis ? :/

Reply

Marsh Posté le 13-12-2005 à 11:13:12   

Reply

Marsh Posté le 13-12-2005 à 12:00:24    

tes insertions en BDD n'utilisent pas de choses comme "INSERT DELAYED " ?


---------------

Reply

Marsh Posté le 13-12-2005 à 12:18:11    

Moi, je vérais bien un serveur sql décalé de quelques disaines de secondes voire de deux trois minutes par rapport au serveur web, une insertion utilisant la date du serveur sql et un test utilisant la date de php.

Reply

Marsh Posté le 13-12-2005 à 15:19:52    

omega c'est une chose a laquelle je n'avais pas pensé, je vais vérifier de ce pas.
 
flo -> non pas de DELAYED

Reply

Marsh Posté le 13-12-2005 à 15:21:13    

Non je n'utilise pas de NOW() pour l'affectation :/

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed