?
Path : /home/admin/public_html/old/administrator/components/com_coalawebtraffic/assets/geoip/ |
Current File : /home/admin/public_html/old/administrator/components/com_coalawebtraffic/assets/geoip/geoipcity.inc |
<?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); if (!function_exists('geoip_open')) { include_once 'geoip.inc'; } 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); } ?>