Sehnal jsem funkci Get_Visitor_Identifier(), je na identifikaci uživatele. Najdete ji na:
http://unas.unas.cz/visitor.txt
Problém je v tom, že mi ta funkce cosi posílá na výstup (ještě jsem nezjišťoval co). Nevidím tam ale žádné echo ani set_cookie, takže se tomu divím.
Když funkci neuzavřu mezi:
Ob_Start();
$visitor = Get_Visitor_Identifier();
Ob_End_Clean();
Tak už se mi patrně neodešlou XML hlavičky na konci skriptu a díky tomu nic nefunguje tak jak má. Na webzdarma jsem tyhle problémy neměl, ale na placeném hostingu vznikly (PHP 4.4.2).
Napadá vás vysvětlení?
                                 
                                 
                               
               
                              
                                 
                                      Co děláš s tím returnem? Tenhle skript po zběžném shlédnutí nic nevypisuje... zkus tu fci spustit v jinak prázdném dokumentu a uvidíš.
                                 
                                 
                               
               
                              
                                 
                                      IMHO by bylo zahodno skript prepsat, aby pouzival superglobalni $_SERVER['REMOTE_ADDR'] misto $REMOTE_ADDR a podobne, protoze skript nebude fungovat, pokud jsou vypnuty register_globals, coz muze byt ten rozdil mezi wz (reg. glob. zapnute) a tim druhym hostingem (nevim, jestli by to mohlo vypisovat i nejakou chybu).
                                 
                                 
                               
               
                              
                                 
                                      Jé, to zkoušel spustit jenom jako deklaraci funkce, ale ono to vypisuje warning až když tu funkci spustím (no jo pochopitelně :o)
Warning: gethostbyaddr(): Address is not a valid IPv4 or IPv6 address in /httpd/html/kolbdancecz/www/include/F_Get_Visitor_Identifier.php on line 72
Takže tý hlášce ale stejnak moc nerozumim. Co je to IPv4 a IPv6?
Jinak s tim $_SERVER má donny pravdu. To přepíšu.
                                 
                                 
                               
               
                              
                                 
                                      >> Address is not a valid IPv4 or IPv6 address
Zadana adresa neodpovida formatu IP adresy. Proste tam davas neco jineho nez XXX.XXX.XXX.XXX, kde XXX je od 0 do 255.
>> Co je to IPv4 a IPv6?
Zkracene IP adresa. v4 a v6 jsou verze. Dnes se nejvice pouziva IPv4. IPv6 je "novejsi" verze, ktera se ale nejak masove nepouziva. Rozdil mezi nimi je v rozsahu adres. IPv6 nabizi mnohonasobne vic adres nez IPv4.
                                 
                                 
                               
               
                              
                                 
                                      Jo ták, už mi buňky v mozku seply. Je to jak říkal donny. Register globals je OFF a tak on nezná tu adresu (jak vysvětluje zase Tomík). Díky vám všem.
Opravil jsem to všechno na $_SERVER[''] a už to fachá bez warningu. Kdyby to někdo potřeboval, tu je funkční verze.
Typické použití - při přihlášení se uloží výstup funkce do $_SESSION[''][''] a při ověřování uživatele se pak porovnává obsah session s aktuálním výstupem funkce.
<?php
function Get_Visitor_Identifier ()
{
  if($_SERVER['HTTP_X_FORWARDED_FOR']) {
    $b = Ereg("^([0-9]{1,3}\.){3,3}[0-9]{1,3}", $_SERVER['HTTP_X_FORWARDED_FOR'], $array);
    if ($b && (Count($array)>=1)) { 
      return (GetHostByAddr($array[0]));
    }
    else {
      return ($_SERVER['REMOTE_ADDR'].'_'.$_SERVER['HTTP_VIA'].'_'.$_SERVER['HTTP_X_FORWARDED_FOR']);
    }
  }
  elseif($_SERVER['HTTP_X_FORWARDED']) {
    $b = Ereg("^([0-9]{1,3}\.){3,3}[0-9]{1,3}", $_SERVER['HTTP_X_FORWARDED'], $array);
    if ($b && (Count($array)>=1)) {
      return (GetHostByAddr($array[0]));
    }
    else {
      return ($_SERVER['REMOTE_ADDR'].'_'.$_SERVER['HTTP_VIA'].'_'.$_SERVER['HTTP_X_FORWARDED']);
    }
  }
  elseif($_SERVER['HTTP_X_FORWARDED_FOR']) {
    $b = Ereg("^([0-9]{1,3}\.){3,3}[0-9]{1,3}", $_SERVER['HTTP_X_FORWARDED_FOR'], $array);
    if ($b && (Count($array)>=1)) {
      return (GetHostByAddr($array[0]));
    }
    else {
      return ($_SERVER['REMOTE_ADDR'].'_'.$_SERVER['HTTP_VIA'].'_'.$_SERVER['HTTP_X_FORWARDED_FOR']);
    }
  }
  elseif($_SERVER['HTTP_FORWARDED']) {
    $b = Ereg ("^([0-9]{1,3}\.){3,3}[0-9]{1,3}", $_SERVER['HTTP_FORWARDED'], $array);
    if ($b && (Count($array)>=1)) {
      return (GetHostByAddr($array[0]));
    }
    else {
      return ($_SERVER['REMOTE_ADDR'].'_'.$_SERVER['HTTP_VIA'].'_'.$_SERVER['HTTP_FORWARDED']);
    }
  }
  elseif($_SERVER['HTTP_VIA']) {
    return ($_SERVER['HTTP_VIA'].'_'.$_SERVER['HTTP_X_COMING_FROM'].'_'.$_SERVER['HTTP_COMING_FROM']);
  }
  elseif($_SERVER['HTTP_X_COMING_FROM'] || $_SERVER['HTTP_COMING_FROM']) {
    return ($_SERVER['REMOTE_ADDR'].'_'.$_SERVER['HTTP_X_COMING_FROM'].'_'.$_SERVER['HTTP_COMING_FROM']);
  }
  else {
    return (MD5(GetHostByAddr($_SERVER['REMOTE_ADDR']).$_SERVER['HTTP_USER_AGENT']));
  }
}
?>
                                 
                                 
                               
               
                              
                                 
                                      Trochu jsem to prepsal. Co takhle toto:
<?php
function ip2int($ip) {
  $ex = explode(".", $ip);
  if (count($ex)!=4) return -1;
  list($a, $b, $c, $d) = $ex;
  $a = $a*16777216;
  $b = $b*65536;
  $c = $c*256;
  $ret = $a+$b+$c+$d;
  if ($ret<0) {return 0;}
  else {return $ret;}
 }
/*function by Marc Meurrens*/
function Get_Visitor_Identifier ()
{
 if($_SERVER['HTTP_X_FORWARDED_FOR'])
 {
   // case 1.A: proxy && HTTP_X_FORWARDED_FOR is defined
   $b = Ereg ("^([0-9]{1,3}\.){3,3}[0-9]{1,3}", $_SERVER['HTTP_X_FORWARDED_FOR'], $array) ;
   if ($b && (Count($array)>=1) )
   { return ( GetHostByAddr($array[0]) ) ; } // first IP in the list
   else
   { return ( ip2int($_SERVER['REMOTE_ADDR']) . '_' . ip2int($_SERVER['HTTP_VIA']) . '_' . ip2int($_SERVER['HTTP_X_FORWARDED_FOR']) ) ; }
 }
 elseif($_SERVER['HTTP_X_FORWARDED'])
 {
   // case 1.B: proxy && HTTP_X_FORWARDED is defined
   $b = Ereg ("^([0-9]{1,3}\.){3,3}[0-9]{1,3}", $_SERVER['HTTP_X_FORWARDED'], $array) ;
   if ($b && (Count($array)>=1) )
   { return ( GetHostByAddr($array[0]) ) ; } // first IP in the list
   else
   { return ( ip2int($_SERVER['REMOTE_ADDR']) . '_' . ip2int($_SERVER['HTTP_VIA']) . '_' . ip2int($_SERVER['HTTP_X_FORWARDED']) ) ; }
 }
 elseif($_SERVER['HTTP_FORWARDED_FOR'])
 {
   // case 1.C: proxy && HTTP_FORWARDED_FOR is defined
   $b = Ereg ("^([0-9]{1,3}\.){3,3}[0-9]{1,3}", $_SERVER['HTTP_FORWARDED_FOR'], $array) ;
   if ($b && (Count($array)>=1) )
   { return ( GetHostByAddr($array[0]) ) ; } // first IP in the list
   else
   { return ( ip2int($_SERVER['REMOTE_ADDR']) . '_' . ip2int($_SERVER['HTTP_VIA']) . '_' . ip2int($_SERVER['HTTP_FORWARDED_FOR'] )) ; }
 }
 elseif($_SERVER['HTTP_FORWARDED'])
 {
   // case 1.D: proxy && HTTP_FORWARDED is defined
   $b = ereg ("^([0-9]{1,3}\.){3,3}[0-9]{1,3}", $_SERVER['HTTP_FORWARDED'], $array) ;
   if ($b && (count($array)>=1) )
   { return ( GetHostByAddr($array[0]) ) ; } // first IP in the list
   else
   { return ( ip2int($_SERVER['REMOTE_ADDR']) . '_' . ip2int($_SERVER['HTTP_VIA']) . '_' . ($_SERVER['HTTP_FORWARDED']) ) ; }
 }
 elseif($_SERVER['HTTP_VIA'])
 {
   // case 2:
   // proxy && HTTP_(X_) FORWARDED (_FOR) not defined && HTTP_VIA defined
   // other exotic variables may be defined
   return ( ip2int($_SERVER['HTTP_VIA']) . 
            '_' . ip2int($_SERVER['HTTP_X_COMING_FROM']) .
            '_' . ip2int($_SERVER['HTTP_COMING_FROM'])    
          ) ;
 }
 elseif(   $_SERVER['HTTP_X_COMING_FROM'] || $_SERVER['HTTP_COMING_FROM']  )
 {
   // case 3: proxy && only exotic variables defined
   // the exotic variables are not enough, we add the REMOTE_ADDR of the proxy
   return ( ip2int($_SERVER['REMOTE_ADDR']) . 
            '_' . ip2int($_SERVER['HTTP_X_COMING_FROM']) .
            '_' . ip2int($_SERVER['HTTP_COMING_FROM'])    
          ) ;
 }
 else
 {
   // case 4: no proxy
   // or tricky case: proxy+refresh
   return ip2int($_SERVER['REMOTE_ADDR']);
 }
}
echo Get_Visitor_Identifier ();
?>