[ webmaster1 @ 04.10.2004. 15:15 ] @
Prvi put koristim ovu funkciju, i ovaj kod je pisan po uzoru na onaj za detekciju browsera...
Code:

<?php

$hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);

$cList= Array (
    
    /* Europe */
    "yu|Serbia and Montengro",
             "hr|Croatia",
    "de|Deutchland",
    "uk|England",
    "fr|France",
    "ru|Russia",
);

//u sledecem redu isprobavam eregi funkciju i ovaj red radi!
if (eregi("yu", $hostname)) echo "Yugoslavia";


foreach ($cList as $cNow) {
    $cNow = explode ("|", $cNow);
    if (eregi ($cNow[0], $hostname))  $country = $cNow[1]; 
    else $country = "Unknown";
}
echo $country;
?>


problem je sto svaki put izbaci unknown...zasto?





[Ovu poruku je menjao -zombie- dana 04.10.2004. u 20:23 GMT+1]
[ afwt @ 04.10.2004. 15:45 ] @
zasto tako? ako hoces tako jednostavnu proveru, zar ti nije lakse da ne teras eregi, nego da uradis to preko substr()? Tvoj kod ne radi jel trcis kroz ceo niz zemalja, pa ti uvek zadnja zemlja u nizu postavi na Unknown jer nije ta...

Zasto ne resis to ovako (umesto tvog foreach):
Code:

// prvo ne znamo koja je
$country = 'Unknown';
// trcimo kroz spisak
foreach ($cList as $cThis) {
  // ako su prva 3 karaktera tekuceg elementa sastavljena od:
  // zadnja 2 slova $hostname-a i uspravne crte |
  if ( substr($cThis, 0, 3) == strtolower(substr($hostname), -2) . '|' )
    // country promeni da pise ono sto u tekucem elementu pocinje
    // od treceg karaktera, tj. posle |
    $country = substr($cThis, 3);
}


i to je to...

mada, moze to i malo bolje:
Code:

$spisak = array(
  'yu' => 'Yugoslavia',
);
// i onda samo umesto celog tog foreach
// trazimo top-level domain, iliti npr. YU
$tld = strtolower(substr($hostname), -2);
// ako postoji element $tld u array-u $spisak, vrati njegovu vrednost
// u usprotnom unknown
$country = ( isset($spisak[$tld]) ? $spisak[$tld] : 'Unknown' );


P.S. inace, eregi ti ne valja... Proci ce ti domen mojyudomen.de kao nash...