Example #1
0
 static function getInstance($filename, $flags)
 {
     if (is_null(self::$gi)) {
         $gi = new GeoIP_Core();
         $gi->flags = $flags;
         if ($gi->flags & self::GEOIP_SHARED_MEMORY) {
             $gi->shmid = @shmop_open(self::GEOIP_SHM_KEY, "a", 0, 0);
         } else {
             $gi->filehandle = fopen($filename, "rb") or die("Can not open {$filename}\n");
             if ($gi->flags & self::GEOIP_MEMORY_CACHE) {
                 $s_array = fstat($gi->filehandle);
                 $gi->memory_buffer = fread($gi->filehandle, $s_array['size']);
             }
         }
         $gi = self::_setup_segments($gi);
         self::$gi = $gi;
     }
     return self::$gi;
 }
Example #2
0
 public function getDefaultCountryId()
 {
     if (is_null($this->country_id)) {
         if (Mage::getStoreConfig('gomage_checkout/geoip/geoip_enabled') && file_exists(Mage::getBaseDir('media') . "/geoip/GeoLiteCity.dat") && extension_loaded('mbstring')) {
             try {
                 $this->country_id = GeoIP_Core::getInstance(Mage::getBaseDir('media') . "/geoip/GeoLiteCity.dat", GeoIP_Core::GEOIP_STANDARD)->geoip_country_code_by_addr(Mage::helper('core/http')->getRemoteAddr());
             } catch (Exception $e) {
                 echo $e;
             }
         }
         if (!$this->country_id) {
             $this->country_id = Mage::getStoreConfig('gomage_checkout/general/default_country');
             if (!$this->country_id) {
                 $this->country_id = Mage::getStoreConfig('general/country/default');
             }
         }
     }
     return $this->country_id;
 }
Example #3
0
 static function _get_record($gi, $ipnum, GeoIP_Core $geoip)
 {
     $seek_country = $geoip->_geoip_seek_country($gi, $ipnum);
     if ($seek_country == $gi->databaseSegments) {
         return NULL;
     }
     // workaround php's broken substr, strpos, etc handling with
     // mbstring.func_overload and mbstring.internal_encoding
     $enc = mb_internal_encoding();
     mb_internal_encoding('ISO-8859-1');
     $record_pointer = $seek_country + (2 * $gi->record_length - 1) * $gi->databaseSegments;
     if ($gi->flags & GeoIP_Core::GEOIP_MEMORY_CACHE) {
         $record_buf = substr($gi->memory_buffer, $record_pointer, self::FULL_RECORD_LENGTH);
     } elseif ($gi->flags & GeoIP_Core::GEOIP_SHARED_MEMORY) {
         $record_buf = @shmop_read($gi->shmid, $record_pointer, self::FULL_RECORD_LENGTH);
     } else {
         fseek($gi->filehandle, $record_pointer, SEEK_SET);
         $record_buf = fread($gi->filehandle, self::FULL_RECORD_LENGTH);
     }
     $record = new GeoIp_Record();
     $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->continent_code = $gi->GEOIP_CONTINENT_CODES[$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_Core::GEOIP_CITY_EDITION_REV1 == $gi->databaseType) {
         $metroarea_combo = 0;
         if ($record->country_code == "US") {
             for ($j = 0; $j < 3; ++$j) {
                 $char = ord(substr($record_buf, $record_buf_pos++, 1));
                 $metroarea_combo += $char << $j * 8;
             }
             $record->metro_code = $record->dma_code = floor($metroarea_combo / 1000);
             $record->area_code = $metroarea_combo % 1000;
         }
     }
     mb_internal_encoding($enc);
     return $record;
 }