PHP Classes

File: geoip/geoipcity.inc.php

Recommend this page to a friend!
  Classes of Schroetter Christian   PHP Ping Traceroute and DNS   geoip/geoipcity.inc.php   Download  
File: geoip/geoipcity.inc.php
Role: Auxiliary script
Content type: text/plain
Description: GeoIP wrapper
Class: PHP Ping Traceroute and DNS
Send ping and traceroute ICMP request messages
Author: By
Last change:
Date: 9 years ago
Size: 6,017 bytes
 

Contents

Class file image Download
<?php

/* geoipcity.inc
 *
 * Copyright (C) 2004 Maxmind LLC
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */

/*
 * Changelog:
 *
 * 2005-01-13 Andrew Hill, Awarez Ltd. (http://www.awarez.net)
 * Formatted file according to PEAR library standards.
 * Changed inclusion of geoip.inc file to require_once, so that
 * this library can be used in the same script as geoip.inc.
 */

define("FULL_RECORD_LENGTH",50);

require_once
'geoip.inc.php';
require_once
'geoipregionvars.php';

class
geoiprecord {
  var
$country_code;
  var
$country_code3;
  var
$country_name;
  var
$region;
  var
$city;
  var
$postal_code;
  var
$latitude;
  var
$longitude;
  var
$area_code;
  var
$dma_code;
}

class
geoipdnsrecord {
  var
$country_code;
  var
$country_code3;
  var
$country_name;
  var
$region;
  var
$regionname;
  var
$city;
  var
$postal_code;
  var
$latitude;
  var
$longitude;
  var
$areacode;
  var
$dmacode;
  var
$isp;
  var
$org;
}

function
getrecordwithdnsservice($str){
 
$record = new geoipdnsrecord;
 
$keyvalue = split(";",$str);
  foreach (
$keyvalue as $keyvalue2){
    list(
$key,$value) = split("=",$keyvalue2);
    if (
$key == "co"){
     
$record->country_code = $value;
    }
    if (
$key == "ci"){
     
$record->city = $value;
    }
    if (
$key == "re"){
     
$record->region = $value;
    }
    if (
$key == "ac"){
     
$record->areacode = $value;
    }
    if (
$key == "dm"){
     
$record->dmacode = $value;
    }
    if (
$key == "is"){
     
$record->isp = $value;
    }
    if (
$key == "or"){
     
$record->org = $value;
    }
    if (
$key == "zi"){
     
$record->postal_code = $value;
    }
    if (
$key == "la"){
     
$record->latitude = $value;
    }
    if (
$key == "lo"){
     
$record->longitude = $value;
    }
  }
 
$number = $GLOBALS['GEOIP_COUNTRY_CODE_TO_NUMBER'][$record->country_code];
 
$record->country_code3 = $GLOBALS['GEOIP_COUNTRY_CODES3'][$number];
 
$record->country_name = $GLOBALS['GEOIP_COUNTRY_NAMES'][$number];
  if (
$record->region != "") {
    if ((
$record->country_code == "US") || ($record->country_code == "CA")){
     
$record->regionname = $GLOBALS['ISO'][$record->country_code][$record->region];
    } else {
     
$record->regionname = $GLOBALS['FIPS'][$record->country_code][$record->region];
    }
  }
  return
$record;
}

function
_get_record($gi,$ipnum){
 
$seek_country = _geoip_seek_country($gi,$ipnum);
  if (
$seek_country == $gi->databaseSegments) {
    return
NULL;
  }
 
$record_pointer = $seek_country + (2 * $gi->record_length - 1) * $gi->databaseSegments;
 
  if (
$gi->flags & GEOIP_MEMORY_CACHE) {
   
$record_buf = substr($gi->memory_buffer,$record_pointer,FULL_RECORD_LENGTH);
  } elseif (
$gi->flags & GEOIP_SHARED_MEMORY){
   
$record_buf = @shmop_read($gi->shmid,$record_pointer,FULL_RECORD_LENGTH);
  } else {
   
fseek($gi->filehandle, $record_pointer, SEEK_SET);
   
$record_buf = fread($gi->filehandle,FULL_RECORD_LENGTH);
  }
 
$record = new geoiprecord;
 
$record_buf_pos = 0;
 
$char = ord(substr($record_buf,$record_buf_pos,1));
   
$record->country_code = $gi->GEOIP_COUNTRY_CODES[$char];
   
$record->country_code3 = $gi->GEOIP_COUNTRY_CODES3[$char];
   
$record->country_name = $gi->GEOIP_COUNTRY_NAMES[$char];
 
$record_buf_pos++;
 
$str_length = 0;
   
// Get region
 
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
  while (
$char != 0){
   
$str_length++;
   
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
  }
  if (
$str_length > 0){
   
$record->region = substr($record_buf,$record_buf_pos,$str_length);
  }
 
$record_buf_pos += $str_length + 1;
 
$str_length = 0;
   
// Get city
 
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
  while (
$char != 0){
   
$str_length++;
   
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
  }
  if (
$str_length > 0){
   
$record->city = substr($record_buf,$record_buf_pos,$str_length);
  }
 
$record_buf_pos += $str_length + 1;
 
$str_length = 0;
   
// Get postal code
 
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
  while (
$char != 0){
   
$str_length++;
   
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
  }
  if (
$str_length > 0){
   
$record->postal_code = substr($record_buf,$record_buf_pos,$str_length);
  }
 
$record_buf_pos += $str_length + 1;
 
$str_length = 0;
   
// Get latitude and longitude
 
$latitude = 0;
 
$longitude = 0;
  for (
$j = 0;$j < 3; ++$j){
   
$char = ord(substr($record_buf,$record_buf_pos++,1));
   
$latitude += ($char << ($j * 8));
  }
 
$record->latitude = ($latitude/10000) - 180;
  for (
$j = 0;$j < 3; ++$j){
   
$char = ord(substr($record_buf,$record_buf_pos++,1));
   
$longitude += ($char << ($j * 8));
  }
 
$record->longitude = ($longitude/10000) - 180;
  if (
GEOIP_CITY_EDITION_REV1 == $gi->databaseType){
   
$dmaarea_combo = 0;
    if (
$record->country_code == "US"){
      for (
$j = 0;$j < 3;++$j){
       
$char = ord(substr($record_buf,$record_buf_pos++,1));
       
$dmaarea_combo += ($char << ($j * 8));
      }
     
$record->dma_code = floor($dmaarea_combo/1000);
     
$record->area_code = $dmaarea_combo%1000;
    }
  }
  return
$record;
}

function
GeoIP_record_by_addr ($gi,$addr){
  if (
$addr == NULL){
     return
0;
  }
 
$ipnum = ip2long($addr);
  return
_get_record($gi, $ipnum);
}

?>