WRInaute passionné
Bonjour
J'ai un problème de requête PHP trop lourde.
C'est dans le but d'ajouter le nombre de connectés (guests et members) sur mon site en -www
Donc en fait le truc est fait
Pour afficher le module "nombre de connectés" sur toutes les pages du site, ce n'est pas du temps réel, mais un script exécuté toutes les deux minutes via cron job, infos stockées simplement dans un petits fichier PHP, donc un truc rapide, basé sur les utilisateurs connecté les 5 dernière minutes.
Donc ça c'est très bien.
Mais j'ai aussi une page "Online users"
http://www.twip.org/online-users.php
Ca c'est du temps réel, il va juste chercher rapidement dans la base de données les utilisateurs en ligne, il y en a 100 à 200 en moyenne sur 5 minutes, et il affiche les IP.
Ca c'est très bien aussi.
Mais je à chaque fois que j'affiche une IP, je voudrais afficher le pays auquel il correspond.
Donc j'ai récupéré une base de données de correspondance (environ 100.000 lignes), donc une grosse base !
Donc, pour chaque IP (environ 100 à 200)
Je converti l'IP en décimale avec la formule
Avec un simple explode () etc...
Une fois que j'ai le décimale, je fais un
Et j'ai le pays
Ainsi j'ai UNE BOUCLE FOR pour les 200 IP environ (petite table donc très rapide)
Et uune BOUCLE FOR imbriquée pour à chaque fois la convertion IP -> décimale ET le requête MySQL dans une TRES GROSSE TABLE
Et la ra rame.
Donc ça marche mais ça rame, (peut être 20 seconde avant de s'afficher !)
Ma question est comment font les autres
Y a t-il quelque chose de plus simple ? un autre moyen ?
Merci et désolé pour le mal de crane de bon matin.
J'ai un problème de requête PHP trop lourde.
C'est dans le but d'ajouter le nombre de connectés (guests et members) sur mon site en -www
Donc en fait le truc est fait
Pour afficher le module "nombre de connectés" sur toutes les pages du site, ce n'est pas du temps réel, mais un script exécuté toutes les deux minutes via cron job, infos stockées simplement dans un petits fichier PHP, donc un truc rapide, basé sur les utilisateurs connecté les 5 dernière minutes.
Donc ça c'est très bien.
Mais j'ai aussi une page "Online users"
http://www.twip.org/online-users.php
Ca c'est du temps réel, il va juste chercher rapidement dans la base de données les utilisateurs en ligne, il y en a 100 à 200 en moyenne sur 5 minutes, et il affiche les IP.
Ca c'est très bien aussi.
Mais je à chaque fois que j'affiche une IP, je voudrais afficher le pays auquel il correspond.
Donc j'ai récupéré une base de données de correspondance (environ 100.000 lignes), donc une grosse base !
Donc, pour chaque IP (environ 100 à 200)
Je converti l'IP en décimale avec la formule
Code:
$ipnum = 16777216*w + 65536*x + 256*y + z
où
IP Address = w.x.y.z
Avec un simple explode () etc...
Une fois que j'ai le décimale, je fais un
Code:
SELECT ip_country FROM geoip WHERE $ipnum >= begin_ip_num AND $ipnum <= end_ip_num LIMIT 1
Et j'ai le pays
Ainsi j'ai UNE BOUCLE FOR pour les 200 IP environ (petite table donc très rapide)
Et uune BOUCLE FOR imbriquée pour à chaque fois la convertion IP -> décimale ET le requête MySQL dans une TRES GROSSE TABLE
Et la ra rame.
Donc ça marche mais ça rame, (peut être 20 seconde avant de s'afficher !)
Ma question est comment font les autres
Y a t-il quelque chose de plus simple ? un autre moyen ?
Merci et désolé pour le mal de crane de bon matin.