Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
[email protected] webmail now available. Want one? Go here.
Cannot use outlook/hotmail/live here to register as they blocking our mail servers. #microsoftdeez
Obey the Epel!

Paste

Pasted as PHP by nnn ( 15 years ago )
<?php

/**
 * SharedGeoIP &Ntilde;„&Ntilde;ƒ&ETH;&frac12;&ETH;&ordm;&Ntilde;†&ETH;&cedil;&ETH;&frac34;&ETH;&frac12;&ETH;&deg;&ETH;&raquo;&Ntilde;Œ&ETH;&frac12;&ETH;&frac34;&Ntilde;&Ntilde;‚&Ntilde;Œ &ETH;&iquest;&ETH;&frac34;&ETH;&raquo;&Ntilde;ƒ&Ntilde;‡&ETH;&micro;&ETH;&frac12;&ETH;&cedil;&Ntilde; &Ntilde;€&ETH;&micro;&ETH;&sup3;&ETH;&cedil;&ETH;&frac34;&ETH;&frac12;&ETH;&deg; &ETH;&iquest;&ETH;&frac34; ip-&ETH;&deg;&ETH;&acute;&Ntilde;€&ETH;&micro;&Ntilde;&Ntilde;ƒ
 *
 * @author avl
 */
class SharedGeoIP extends SharedTools
{
    private static $geodb    = 'vdb7';
    const IP_MASK = 0xffff0000;
    private static $memcache;

    /**
     * &ETH;Ÿ&ETH;&frac34;&ETH;&raquo;&Ntilde;ƒ&Ntilde;‡&ETH;&cedil;&Ntilde;‚&Ntilde;Œ &ETH;&sup3;&ETH;&micro;&ETH;&frac34;&ETH;&cedil;&ETH;&frac12;&Ntilde;„&Ntilde;ƒ &ETH;&iquest;&ETH;&frac34; IP-&ETH;&deg;&ETH;&acute;&Ntilde;€&ETH;&micro;&Ntilde;&Ntilde;ƒ, &ETH;&sup2;&ETH;&frac34;&ETH;&middot;&ETH;&sup2;&Ntilde;€&ETH;&deg;&Ntilde;‰&ETH;&deg;&ETH;&micro;&Ntilde;‚ &ETH;&iquest;&Ntilde;ƒ&Ntilde;&Ntilde;‚&ETH;&frac34;&ETH;&sup1; &ETH;&frac34;&ETH;&plusmn;&Ntilde;Š&ETH;&micro;&ETH;&ordm;&Ntilde;‚ &ETH;&micro;&Ntilde;&ETH;&raquo;&ETH;&cedil;
     * &ETH;&cedil;&ETH;&frac12;&Ntilde;„&ETH;&deg; &ETH;&frac12;&ETH;&micro; &ETH;&frac12;&ETH;&deg;&ETH;&sup1;&ETH;&acute;&ETH;&micro;&ETH;&frac12;&ETH;&deg; &ETH;&cedil;&ETH;&raquo;&ETH;&cedil; &ETH;&frac34;&ETH;&plusmn;&Ntilde;Š&ETH;&micro;&ETH;&ordm;&Ntilde;‚ &Ntilde; &ETH;&middot;&ETH;&deg;&ETH;&iquest;&ETH;&frac34;&ETH;&raquo;&ETH;&micro;&ETH;&frac12;&ETH;&frac12;&Ntilde;‹&ETH;&frac14;&ETH;&cedil; &Ntilde;&ETH;&sup2;&ETH;&frac34;&ETH;&sup1;&Ntilde;&Ntilde;‚&ETH;&sup2;&ETH;&deg;&ETH;&frac14;&ETH;&cedil; name &ETH;&cedil; code.
     * &ETH;Ÿ&Ntilde;€&ETH;&cedil;&ETH;&frac14;&ETH;&micro;&Ntilde;€ &ETH;&cedil;&Ntilde;&ETH;&iquest;&ETH;&frac34;&ETH;&raquo;&Ntilde;Œ&ETH;&middot;&ETH;&frac34;&ETH;&sup2;&ETH;&deg;&ETH;&frac12;&ETH;&cedil;&Ntilde;:

     * $geoInfo = SharedGeoIP::getCountryByIp('178.11.90.13');
     * if($geoInfo)
     * {
     *      $country = $geoInfo->country; # United Kingdom, Canada, Italy ...
     *      $code    = $geoInfo->code; # GB, CA, IT ...
     *      ....
     * }
     * @param string $ip IP-&ETH;&deg;&ETH;&acute;&Ntilde;€&ETH;&micro;&Ntilde;
     * @return stdClass
     */
    static function getCountryByIp($ip)
    {

        $iplong = ip2long($ip);
        $rec = self::getCache($ip);
        if ($rec) return $rec;
        $rec = self::Db(self::$geodb)
        ->query('SELECT geoipdata.ipf, geoipdata.ipt, geo_areas.code AS code, geo_areas.name AS country
        FROM geo_areas INNER JOIN geoipdata ON
        geo_areas.geo_area_id = geoipdata.geo_area_id
        WHERE geoipdata.ipf < ? AND ? < geoipdata.ipt', $iplong, $iplong)
        ->fetchRowAsObject();
        self::setCache($rec);
        return $rec;
    }

    private static function initCache() {
        if (!self::$memcache) {
            self::$memcache= new Memcache;
            @self::$memcache->connect('localhost', 11211) or die('Memcached failed');
        }
    }

    private static function getCache($ipLong) {
        self::initCache();
        $ipMask = self::IP_MASK & $ipLong;
        $ipRec = self::$memcache->get($ipMask);
        if (!$ipRec) {
            return null;
        }
        if ($ipRec->ipf <= $ipLong && $ipRec->ipt >= $ipLong) {
            return $ipRec;
        }
        return null;
    }

    private function setCache($ipRec) {
        self::initCache();
        self::$memcache->set($ipRec->ipf & self::IP_MASK, $ipRec, false, 600); // 10 minutes
    }

}

?>

 

Revise this Paste

Parent: 4837
Your Name: Code Language: