Autor Zpráva
Anony
Profil *
Ahoj, mam jednoduchý skript, který by měl ukládat každý pohyb kohokoliv na stránkách, vytvořil jsem ho do funkce, která vypadá takto:

function communityAttendance() {
   if(isset($_SERVER))
   {
      if (!empty($_SERVER['HTTP_CLIENT_IP'])) $visitorIP = $_SERVER['HTTP_CLIENT_IP'];
      elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) $visitorIP = $_SERVER['HTTP_X_FORWARDED_FOR'];
      else $visitorIP = $_SERVER['REMOTE_ADDR'];
         
      $visitorSection = $_SERVER['SCRIPT_NAME'];
      $visitorInfo = "$_SERVER[HTTP_USER_AGENT]" . "$_SERVER[HTTP_ACCEPT_LANGUAGE]" . "$_SERVER[HTTP_HOST]";
      $date = Time();
      
      mysql_query("INSERT INTO attendance (ipaddress,whois,section,date) VALUES
	    ('".$visitorIP."','".$visitorInfo."','".$visitorSection."','".$date."')");
   }
}


přidání do databáze proběhne, ovšem jeden zápis se provede 7x (z toho 1x správně a 6x se visitorSection uloží jako kdyby návštěvník navšítivil 404 stránku).
Tuto funkci volám v headeru stránky, kde načítám pro celý projekt i databázi, která však běží v pořádku. Mám na stránce i jiný skripty, které pracují přes SQL
s MySQL databází a pracují v pořádku. Nevíte někdo čím by to mohlo být?

Problém:
- několikanásobné přidání do databáze (přesně 7x jeden zápis)
DJ Miky
Profil
Nejspíš někdo skutečně načetl 404ku (předpokládám, že chybová stránka taky includuje header a taky volá funkci communityAttendance()). Může jít třeba o neexistující favicon.ico, tu prohlížeče načítají (resp. pokoušejí načítat) automaticky a můžou tak generovat 404 ve statistikách.

Místo $_SERVER['SCRIPT_NAME'] je možné do $visitorSection ukládat $_SERVER['REQUEST_URI'], což je adresa, o kterou klient zažádal. Podle toho se dá zjistit, jaké adresy generují 404ky.

A co se týče samotného ukládání, pak je asi nejlogičtější řešení nevolat communityAttendance() na chybové stránce, popř. si neexistující adresy ukládat někam mimo (hlídání neexistujících odkazů).
Anony
Profil *
Podle toho se dá zjistit, jaké adresy generují 404ky.
- tu generuje každá neexistující adresa, to nemusím nikde zjišťovat přeci

Místo $_SERVER['SCRIPT_NAME'] je možné do $visitorSection ukládat $_SERVER['REQUEST_URI'], což je adresa, o kterou klient zažádal.
- zkoušel jsem, než jsem napsal, bohužel stejný problém (7x odeslaný požadavek)

A co se týče samotného ukládání, pak je asi nejlogičtější řešení nevolat communityAttendance() na chybové stránce, popř. si neexistující adresy ukládat někam mimo (hlídání neexistujících odkazů).
- pokud by se přesměrovávalo na chybové hlášky, probíhal by skript do nekonečna, dokud by u webhostingu nevypršel max. čas provádění php skriptu přeci, nebo jsem to špatně pochopil?
Anony
Profil *
No jasně, špatně jsem pochopil tvůj první bod. Opraveno, díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0