Bonjour,
Un petit module bien sympa, mais gourmand en ressources!
J'ai regardé un petit truc dans le fichier index.php qui se trouve à la racine du module
$httprefmax = '500';
$res = mysql_query("SELECT * FROM ".$xoopsDB->prefix("visit_user_page")."");
$numrows = mysql_num_rows($res);
if (($numrows + 1) >= $httprefmax) {
mysql_query("delete FROM ".$xoopsDB->prefix("visit_user_page")." WHERE enregis = 'termine'");
mysql_query("delete FROM ".$xoopsDB->prefix("visit_user")." WHERE ip = 'termine'");
}
A ce que je vois c'est une routine d'auto optimisation de la table lorsqu'elle contient plus de 500 enregistrements
mais pourquoi lire tout le contenu de la table pour avoir seulement le nombre d'enregistrements
Voici ce que je propose pour optimiser:
Citation : $httprefmax = '1000';
$res = mysql_query("SELECT count(*) FROM ".$xoopsDB->prefix("visit_user_page")."");
$numrows = $xoopsDB->fetchRow($res);
if (($numrows[0] + 1) >= $httprefmax) {
mysql_query("delete FROM ".$xoopsDB->prefix("visit_user_page")." WHERE enregis = 'termine'");
mysql_query("delete FROM ".$xoopsDB->prefix("visit_user")." WHERE ip = 'termine'");
}
Je vois aussi un bug de logique
if ($visitname && (($tempe - $tem) > 3600))
{
$addips = "termine";
mysql_query("UPDATE ".$xoopsDB->prefix("visit_user")." SET ip='$addips' WHERE visitname='$lognom' AND ip='$addip'");
mysql_query("UPDATE ".$xoopsDB->prefix("visit_user_page")." SET enregis='$addips' WHERE nom='$lognom' AND enregis='$addip'");
$nvisit = 1;
$tempes = $tempe + 1;
mysql_query("INSERT INTO ".$xoopsDB->prefix("visit_user")." VALUES ('','$lognom','$nvisit','$addip','$tempe','$tempes')");
mysql_query("INSERT INTO ".$xoopsDB->prefix("visit_user_page")." VALUES ('', '$lognom', '$page', '$nav', '$langue', '$addip')");
}
Dans ce cas ci l'update pour mettre l'ip à "termine" ne se fait jamais puisque la variable contenant l'ip est modifié avant l'update, donc la clause where ne fonctionne pas
Je penses qu'il faut modifier comme suit:
Citation : if ($visitname && (($tempe - $tem) > 3600))
{
// $addips = "termine";
mysql_query("UPDATE ".$xoopsDB->prefix("visit_user")." SET ip='termine' WHERE visitname='$lognom' AND ip='$addip'");
mysql_query("UPDATE ".$xoopsDB->prefix("visit_user_page")." SET enregis='termine' WHERE nom='$lognom' AND enregis='$addip'");
$nvisit = 1;
$tempes = $tempe + 1;
mysql_query("INSERT INTO ".$xoopsDB->prefix("visit_user")." VALUES ('','$lognom','$nvisit','$addip','$tempe','$tempes')");
mysql_query("INSERT INTO ".$xoopsDB->prefix("visit_user_page")." VALUES ('', '$lognom', '$page', '$nav', '$langue', '$addip')");
}
Merci de me vérifier au cas ou ce serait une erreur de ma part