⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geoip.inc

📁 网络硬盘_支持1GB文件上传和续传_无错版
💻 INC
📖 第 1 页 / 共 2 页
字号:
                     ($gi->databaseType == GEOIP_CITY_EDITION_REV1)                     || ($gi->databaseType == GEOIP_ORG_EDITION)		    || ($gi->databaseType == GEOIP_ISP_EDITION)		    || ($gi->databaseType == GEOIP_ASNUM_EDITION)){                $gi->databaseSegments = 0;                $buf = @shmop_read ($gi->shmid, $offset, SEGMENT_RECORD_LENGTH);                for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){                    $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));                }	            if (($gi->databaseType == GEOIP_ORG_EDITION)||			($gi->databaseType == GEOIP_ISP_EDITION)) {	                $gi->record_length = ORG_RECORD_LENGTH;                }            }            break;        } else {            $offset -= 4;        }    }    if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||        ($gi->databaseType == GEOIP_PROXY_EDITION)||        ($gi->databaseType == GEOIP_NETSPEED_EDITION)){        $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;    }  } else {    $filepos = ftell($gi->filehandle);    fseek($gi->filehandle, -3, SEEK_END);    for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {        $delim = fread($gi->filehandle,3);        if ($delim == (chr(255).chr(255).chr(255))){        $gi->databaseType = ord(fread($gi->filehandle,1));        if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){            $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;        }        else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){	    $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;                }  else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0) ||                 ($gi->databaseType == GEOIP_CITY_EDITION_REV1) ||                  ($gi->databaseType == GEOIP_ORG_EDITION) || 		 ($gi->databaseType == GEOIP_ISP_EDITION) ||                  ($gi->databaseType == GEOIP_ASNUM_EDITION)){            $gi->databaseSegments = 0;            $buf = fread($gi->filehandle,SEGMENT_RECORD_LENGTH);            for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){            $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));            }	    if ($gi->databaseType == GEOIP_ORG_EDITION) {	    $gi->record_length = ORG_RECORD_LENGTH;            }        }        break;        } else {        fseek($gi->filehandle, -4, SEEK_CUR);        }    }    if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||        ($gi->databaseType == GEOIP_PROXY_EDITION)||        ($gi->databaseType == GEOIP_NETSPEED_EDITION)){         $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;    }    fseek($gi->filehandle,$filepos,SEEK_SET);  }  return $gi;}function geoip_open($filename, $flags) {  $gi = new GeoIP;  $gi->flags = $flags;  if ($gi->flags & GEOIP_SHARED_MEMORY) {    $gi->shmid = @shmop_open (GEOIP_SHM_KEY, "a", 0, 0);    } else {    $gi->filehandle = fopen($filename,"rb");    if ($gi->flags & GEOIP_MEMORY_CACHE) {        $s_array = fstat($gi->filehandle);        $gi->memory_buffer = fread($gi->filehandle, $s_array[size]);    }  }  $gi = _setup_segments($gi);  return $gi;}function geoip_close($gi) {  if ($gi->flags & GEOIP_SHARED_MEMORY) {    return true;  }  return fclose($gi->filehandle);}function geoip_country_id_by_name($gi, $name) {  $addr = gethostbyname($name);  if (!$addr || $addr == $name) {    return false;  }  return geoip_country_id_by_addr($gi, $addr);}function geoip_country_code_by_name($gi, $name) {  $country_id = geoip_country_id_by_name($gi,$name);  if ($country_id !== false) {        return $gi->GEOIP_COUNTRY_CODES[$country_id];  }  return false;}function geoip_country_name_by_name($gi, $name) {  $country_id = geoip_country_id_by_name($gi,$name);  if ($country_id !== false) {        return $gi->GEOIP_COUNTRY_NAMES[$country_id];  }  return false;}function geoip_country_id_by_addr($gi, $addr) {  $ipnum = ip2long($addr);  return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;}function geoip_country_code_by_addr($gi, $addr) {  $country_id = geoip_country_id_by_addr($gi,$addr);  if ($country_id !== false) {    return $gi->GEOIP_COUNTRY_CODES[$country_id];  }  return false;}function geoip_country_name_by_addr($gi, $addr) {  $country_id = geoip_country_id_by_addr($gi,$addr);  if ($country_id !== false) {        return $gi->GEOIP_COUNTRY_NAMES[$country_id];  }  return false;}function _geoip_seek_country($gi, $ipnum) {  $offset = 0;  for ($depth = 31; $depth >= 0; --$depth) {    if ($gi->flags & GEOIP_MEMORY_CACHE) {      $buf = substr($gi->memory_buffer,                            2 * $gi->record_length * $offset,                            2 * $gi->record_length);        } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {      $buf = @shmop_read ($gi->shmid,                             2 * $gi->record_length * $offset,                            2 * $gi->record_length );        } else {      fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0        or die("fseek failed");      $buf = fread($gi->filehandle, 2 * $gi->record_length);    }    $x = array(0,0);    for ($i = 0; $i < 2; ++$i) {      for ($j = 0; $j < $gi->record_length; ++$j) {        $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);      }    }    if ($ipnum & (1 << $depth)) {      if ($x[1] >= $gi->databaseSegments) {        return $x[1];      }      $offset = $x[1];        } else {      if ($x[0] >= $gi->databaseSegments) {        return $x[0];      }      $offset = $x[0];    }  }  trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);  return false;}function _get_org($gi,$ipnum){  $seek_org = _geoip_seek_country($gi,$ipnum);  if ($seek_org == $gi->databaseSegments) {    return NULL;  }  $record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments;  if ($gi->flags & GEOIP_SHARED_MEMORY) {    $org_buf = @shmop_read ($gi->shmid, $record_pointer, MAX_ORG_RECORD_LENGTH);    } else {    fseek($gi->filehandle, $record_pointer, SEEK_SET);    $org_buf = fread($gi->filehandle,MAX_ORG_RECORD_LENGTH);  }  $org_buf = substr($org_buf, 0, strpos($org_buf, 0));  return $org_buf;}function geoip_org_by_addr ($gi,$addr) {  if ($addr == NULL) {    return 0;  }  $ipnum = ip2long($addr);  return _get_org($gi, $ipnum);}function _get_region($gi,$ipnum){  if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){    $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV0;    if ($seek_region >= 1000){      $country_code = "US";      $region = chr(($seek_region - 1000)/26 + 65) . chr(($seek_region - 1000)%26 + 65);    } else {            $country_code = $gi->GEOIP_COUNTRY_CODES[$seek_region];      $region = "";    }  return array ($country_code,$region);    }  else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {    $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV1;    //print $seek_region;    if ($seek_region < US_OFFSET){      $country_code = "";      $region = "";          } else if ($seek_region < CANADA_OFFSET) {      $country_code = "US";      $region = chr(($seek_region - US_OFFSET)/26 + 65) . chr(($seek_region - US_OFFSET)%26 + 65);        } else if ($seek_region < WORLD_OFFSET) {      $country_code = "CA";      $region = chr(($seek_region - CANADA_OFFSET)/26 + 65) . chr(($seek_region - CANADA_OFFSET)%26 + 65);    } else {            $country_code = $gi->GEOIP_COUNTRY_CODES[($seek_region - WORLD_OFFSET) / FIPS_RANGE];      $region = "";    }  return array ($country_code,$region);  }}function geoip_region_by_addr ($gi,$addr) {  if ($addr == NULL) {    return 0;  }  $ipnum = ip2long($addr);  return _get_region($gi, $ipnum);}function getdnsattributes ($l,$ip){  $r = new Net_DNS_Resolver();  $r->nameservers = array("ws1.maxmind.com");  $p = $r->search($l."." . $ip .".s.maxmind.com","TXT","IN");  $str = is_object($p->answer[0])?$p->answer[0]->string():'';  ereg("\"(.*)\"",$str,$regs);  $str = $regs[1];  return $str;}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -