php根據ip地址查地區,根據ip地址能查詢哪些信息

本文目錄一覽:

php 怎麼通過ip來獲取所在位置

echo  getcposition(getIP());

function getIP(){

    if (isset($_SERVER)) {

        if (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {

            $realip = $_SERVER[HTTP_X_FORWARDED_FOR];

        } elseif (isset($_SERVER[HTTP_CLIENT_IP])) {

            $realip = $_SERVER[HTTP_CLIENT_IP];

        } else {

            $realip = $_SERVER[REMOTE_ADDR];

        }

    } else {

        if (getenv(“HTTP_X_FORWARDED_FOR”)) {

            $realip = getenv( “HTTP_X_FORWARDED_FOR”);

        } elseif (getenv(“HTTP_CLIENT_IP”)) {

            $realip = getenv(“HTTP_CLIENT_IP”);

        } else {

            $realip = getenv(“REMOTE_ADDR”);

        }

    }

    return $realip;

}

function getcposition($ip){

$res1 = file_get_contents(“”);

$res1 = json_decode($res1,true);

//print_r($res1);

  if ($res1[ “code”]==0){

return $res1[‘data’][“country”].$res1[‘data’][ “region”].$res1[‘data’][“city”].”_”.$res1[‘data’][ “isp”];

}else{

return “未知”;

}

?

php 怎麼獲取記錄ip所在地

?php

header(‘Content-Type:text/html;Charset=utf-8’);

function GetIp(){

$realip = ”;

$unknown = ‘unknown’;

if (isset($_SERVER)){

if(isset($_SERVER[‘HTTP_X_FORWARDED_FOR’]) !empty($_SERVER[‘HTTP_X_FORWARDED_FOR’]) strcasecmp($_SERVER[‘HTTP_X_FORWARDED_FOR’], $unknown)){

$arr = explode(‘,’, $_SERVER[‘HTTP_X_FORWARDED_FOR’]);

foreach($arr as $ip){

$ip = trim($ip);

if ($ip != ‘unknown’){

$realip = $ip;

break;

}

}

}else if(isset($_SERVER[‘HTTP_CLIENT_IP’]) !empty($_SERVER[‘HTTP_CLIENT_IP’]) strcasecmp($_SERVER[‘HTTP_CLIENT_IP’], $unknown)){

$realip = $_SERVER[‘HTTP_CLIENT_IP’];

}else if(isset($_SERVER[‘REMOTE_ADDR’]) !empty($_SERVER[‘REMOTE_ADDR’]) strcasecmp($_SERVER[‘REMOTE_ADDR’], $unknown)){

$realip = $_SERVER[‘REMOTE_ADDR’];

}else{

$realip = $unknown;

}

}else{

if(getenv(‘HTTP_X_FORWARDED_FOR’) strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR’), $unknown)){

$realip = getenv(“HTTP_X_FORWARDED_FOR”);

}else if(getenv(‘HTTP_CLIENT_IP’) strcasecmp(getenv(‘HTTP_CLIENT_IP’), $unknown)){

$realip = getenv(“HTTP_CLIENT_IP”);

}else if(getenv(‘REMOTE_ADDR’) strcasecmp(getenv(‘REMOTE_ADDR’), $unknown)){

$realip = getenv(“REMOTE_ADDR”);

}else{

$realip = $unknown;

}

}

$realip = preg_match(“/[\d\.]{7,15}/”, $realip, $matches) ? $matches[0] : $unknown;

return $realip;

}

function GetIpLookup($ip = ”){

if(empty($ip)){

$ip = GetIp();

}

$res = @file_get_contents(‘;ip=’ . $ip);

if(empty($res)){ return false; }

$jsonMatches = array();

preg_match(‘#\{.+?\}#’, $res, $jsonMatches);

if(!isset($jsonMatches[0])){ return false; }

$json = json_decode($jsonMatches[0], true);

if(isset($json[‘ret’]) $json[‘ret’] == 1){

$json[‘ip’] = $ip;

unset($json[‘ret’]);

}else{

return false;

}

return $json;

}

$ipInfos = GetIpLookup(‘123.125.114.144’); //baidu.com IP地址

var_dump($ipInfos);

使用了新浪的開放API

PHP IP地址歸屬地查詢的接口

function GetIpLookup($ip = ”){

$res = @file_get_contents(‘;ip=’ . $ip);

if(empty($res)){ return false; }

$jsonMatches = array();

preg_match(‘#\{.+?\}#’, $res, $jsonMatches);

if(!isset($jsonMatches[0])){ return false; }

$json = json_decode($jsonMatches[0], true);

if(isset($json[‘ret’]) $json[‘ret’] == 1){

$json[‘ip’] = $ip;

unset($json[‘ret’]);

}else{

return false;

}

return $json;

}

$ipInfos = $this-GetIpLookup(‘222.223.191.12’); //baidu.com IP地址

var_dump($ipInfos);

高分求一段IP判斷城市的PHP代碼

?php

/**************************/

/******IP判斷城市文件******/

/**************************/

$action=$_GET[‘action’];

if($action==ip){

if ($_SERVER[“HTTP_X_FORWARDED_FOR”]){

$ip = $_SERVER[“HTTP_X_FORWARDED_FOR”];}

else if ($_SERVER[“HTTP_CLIENT_IP”]){

$ip = $_SERVER[“HTTP_CLIENT_IP”];}

else if ($_SERVER[“REMOTE_ADDR”]){

$ip = $_SERVER[“REMOTE_ADDR”];}

else if (getenv(“HTTP_X_FORWARDED_FOR”)){

$ip = getenv(“HTTP_X_FORWARDED_FOR”);}

else if (getenv(“HTTP_CLIENT_IP”)){

$ip = getenv(“HTTP_CLIENT_IP”);}

else if (getenv(“REMOTE_ADDR”)){

$ip = getenv(“REMOTE_ADDR”);}

else{

$ip = “Unknown”;}

}

$dat_path = ‘qqwry.dat’;

//判斷IP地址是否有效

if(!ereg(“^([0-9]{1,3}.){3}[0-9]{1,3}$”, $ip)){

return ‘IP Address Invalid’;

}

//打開IP數據庫

if(!$fd = @fopen($dat_path, ‘rb’)){

return ‘IP data file not exists or access denied’;

}

//explode函數分解IP地址,運算得出整數形結果

$ip = explode(‘.’, $ip);

$ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];

//獲取IP地址索引開始和結束位置

$DataBegin = fread($fd, 4);

$DataEnd = fread($fd, 4);

$ipbegin = implode(”, unpack(‘L’, $DataBegin));

if($ipbegin 0) $ipbegin += pow(2, 32);

$ipend = implode(”, unpack(‘L’, $DataEnd));

if($ipend 0) $ipend += pow(2, 32);

$ipAllNum = ($ipend – $ipbegin) / 7 + 1;

$BeginNum = 0;

$EndNum = $ipAllNum;

//使用二分查找法從索引記錄中搜索匹配的IP地址記錄

while($ip1num$ipNum || $ip2num$ipNum) {

$Middle= intval(($EndNum + $BeginNum) / 2);

//偏移指針到索引位置讀取4個位元組

fseek($fd, $ipbegin + 7 * $Middle);

$ipData1 = fread($fd, 4);

if(strlen($ipData1) 4) {

fclose($fd);

return ‘File Error’;

}

//提取出來的數據轉換成長整形,如果數據是負數則加上2的32次冪

$ip1num = implode(”, unpack(‘L’, $ipData1));

if($ip1num 0) $ip1num += pow(2, 32);

//提取的長整型數大於我們IP地址則修改結束位置進行下一次循環

if($ip1num $ipNum) {

$EndNum = $Middle;

continue;

}

//取完上一個索引後取下一個索引

$DataSeek = fread($fd, 3);

if(strlen($DataSeek) 3) {

fclose($fd);

return ‘File Error’;

}

$DataSeek = implode(”, unpack(‘L’, $DataSeek.chr(0)));

fseek($fd, $DataSeek);

$ipData2 = fread($fd, 4);

if(strlen($ipData2) 4) {

fclose($fd);

return ‘File Error’;

}

$ip2num = implode(”, unpack(‘L’, $ipData2));

if($ip2num 0) $ip2num += pow(2, 32);

//找不到IP地址對應城市

if($ip2num $ipNum) {

if($Middle == $BeginNum) {

fclose($fd);

return ‘No Data’;

}

$BeginNum = $Middle;

}

}

$ipFlag = fread($fd, 1);

if($ipFlag == chr(1)) {

$ipSeek = fread($fd, 3);

if(strlen($ipSeek) 3) {

fclose($fd);

return ‘System Error’;

}

$ipSeek = implode(”, unpack(‘L’, $ipSeek.chr(0)));

fseek($fd, $ipSeek);

$ipFlag = fread($fd, 1);

}

if($ipFlag == chr(2)) {

$AddrSeek = fread($fd, 3);

if(strlen($AddrSeek) 3) {

fclose($fd);

return ‘System Error’;

}

$ipFlag = fread($fd, 1);

if($ipFlag == chr(2)) {

$AddrSeek2 = fread($fd, 3);

if(strlen($AddrSeek2) 3) {

fclose($fd);

return ‘System Error’;

}

$AddrSeek2 = implode(”, unpack(‘L’, $AddrSeek2.chr(0)));

fseek($fd, $AddrSeek2);

} else {

fseek($fd, -1, SEEK_CUR);

}

while(($char = fread($fd, 1)) != chr(0))

$ipAddr2 .= $char;

$AddrSeek = implode(”, unpack(‘L’, $AddrSeek.chr(0)));

fseek($fd, $AddrSeek);

while(($char = fread($fd, 1)) != chr(0))

$ipAddr1 .= $char;

} else {

fseek($fd, -1, SEEK_CUR);

while(($char = fread($fd, 1)) != chr(0))

$ipAddr1 .= $char;

$ipFlag = fread($fd, 1);

if($ipFlag == chr(2)) {

$AddrSeek2 = fread($fd, 3);

if(strlen($AddrSeek2) 3) {

fclose($fd);

return ‘System Error’;

}

$AddrSeek2 = implode(”, unpack(‘L’, $AddrSeek2.chr(0)));

fseek($fd, $AddrSeek2);

} else {

fseek($fd, -1, SEEK_CUR);

}

while(($char = fread($fd, 1)) != chr(0)){

$ipAddr2 .= $char;

}

}

fclose($fd);

//返回IP地址對應的城市結果

if(preg_match(‘/http/i’, $ipAddr2)) {

$ipAddr2 = ”;

}

$ipaddr = “$ipAddr1 $ipAddr2”;

$ipaddr = preg_replace(‘/CZ88.Net/is’, ”, $ipaddr);

$ipaddr = preg_replace(‘/^s*/is’, ”, $ipaddr);

$ipaddr = preg_replace(‘/s*$/is’, ”, $ipaddr);

if(preg_match(‘/http/i’, $ipaddr) || $ipaddr == ”) {

$ipaddr = ‘No Data’;

}

require_once(“cityadd.php”);

if(strpos($ipaddr,$hefei))

{

}

echo “var jstext=’$hefei'”; //輸出一句JS語句,生成一個JS變量,並賦顛值為PHP變量 $action的值

?

一下是cityadd.php的內容

?php

$hefei = “合肥市”;

$wuhu = “蕪湖市”;

$huainan = “淮南市”;

$maanshan = “馬鞍山市”;

$chuzhou = “滁州市”;

$huaibei = “淮北市”;

$tongling = “銅陵市”;

$anqing = “安慶市”;

$huangshan = “黃山市”;

$fuyang = “阜陽市”;

$bengbu = “蚌埠市”;

$suzhou = “宿州市”;

$luan = “六安市”;

$bozhou = “亳州市”;

$chizhou = “池州市”;

$xuancheng = “宣城市”;

$qita = “其他”;

?

上網下一個qqwry.dat

這幾個文件放在一個文件夾,做一個頁面裏面放一個JS,並且調用第一個文件的函數,就可以了

script document.write(jstext)/script

php用IP查詢歸屬地

class ip_location

{

function init()

{

$this-wrydat = ‘ip_area.dat’;

$this-fp = fopen($this-wrydat, ‘rb’);

$this-getipnumber();

$this-getwryversion();

$this – REDIRECT_MODE_0 = 0;

$this – REDIRECT_MODE_1 = 1;

$this – REDIRECT_MODE_2 = 2;

}

function get($str)

{

return $this-$str;

}

function set($str,$val)

{

$this-$str = $val;

}

function getbyte($length,$offset=null)

{

!is_null($offset) fseek($this-fp, $offset, SEEK_SET);

return fread($this-fp, $length);

}

function packip($ip)

{

return pack(‘N’, intval(ip2long($ip)));

}

function getlong($length=4, $offset=null)

{

$chr=null;

for($c=0;$length%4!=0$c(4-$length%4);$c++)

{

$chr .= chr(0);

}

$var = unpack( ‘Vlong’, $this-getbyte($length, $offset).$chr);

return $var[‘long’];

}

function getwryversion()

{

$length = preg_match(“/coral/i”,$this-wrydat)?26:30;

$this-wrydat_version = $this-getbyte($length, $this-firstip-$length);

}

function getipnumber()

{

$this-firstip = $this-getlong();

$this-lastip = $this-getlong();

$this-ipnumber = ($this-lastip-$this-firstip)/7+1;

}

function getstring($data=”, $offset=NULL)

{

$char = $this-getbyte(1,$offset);

while(ord($char) 0)

{

$data .= $char;

$char = $this-getbyte(1);

}

return $data;

}

function iplocaltion($ip)

{

$ip = $this-packip($ip);

$low = 0;

$high = $this-ipnumber-1;

$ipposition = $this-lastip;

while($low = $high)

{

$t = floor(($low+$high)/2);

if($ip strrev($this-getbyte(4,$this-firstip+$t*7)))

$high = $t – 1;

else

{

if($ip strrev($this-getbyte(4,$this-getlong(3))))

$low = $t + 1;

else

{

$ipposition = $this-firstip+$t*7;

break;

}

}

}

return $ipposition;

}

function getarea()

{

$b = $this-getbyte(1);

switch(ord($b))

{

case $this – REDIRECT_MODE_0 :

return ”;

break;

case $this – REDIRECT_MODE_1:

case $this – REDIRECT_MODE_2:

return $this-getstring(”,$this-getlong(3));

break;

default:

return $this-getstring($b);

break;

}

}

function getiplocation($ip)

{

$ippos = $this-iplocaltion($ip);

$this-ip_range_begin = long2ip($this-getlong(4,$ippos));

$this-ip_range_end = long2ip($this-getlong(4,$this-getlong(3)));

$b = $this-getbyte(1);

switch(ord($b))

{

case $this – REDIRECT_MODE_1:

$b = $this-getbyte(1,$this-getlong(3));

if(ord($b) == $this – REDIRECT_MODE_2)

{

$countryoffset = $this-getlong(3);

$this-area = $this-getarea();

$this-country = $this-getstring(”,$countryoffset);

}

else

{

$this-country = $this-getstring($b);

$this-area = $this-getarea();

}

break;

case $this – REDIRECT_MODE_2:

$countryoffset = $this-getlong(3);

$this-area = $this-getarea();

$this-country = $this-getstring(”,$countryoffset);

break;

default:

$this-country = $this-getstring($b);

$this-area = $this-getarea();

break;

}

}

}

—————————————————————

調用方法:

$iploca = new ip_location;

$iploca – init();

$iploca – getiplocation($ip);

$area[‘country’] = str_replace(array(‘CZ88.NET’), ”, $iploca – get(‘country’));

$area[‘area’] = str_replace(array(‘CZ88.NET’), ”, $iploca – get(‘area’));

$area[‘country’]==” $area[‘country’]=’未知’;

$area[‘area’]==” $area[‘area’]=’未知’;

return $area;

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/246259.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:14
下一篇 2024-12-12 13:14

相關推薦

  • cmd看地址

    本文將從多個方面詳細闡述cmd看地址,包括如何查看本機IP地址、如何查看路由器IP、如何查看DNS服務器IP等等。 一、查看本機IP地址 要查看本機IP地址,首先需要打開cmd窗口…

    編程 2025-04-29
  • 尚硅谷官網地址用法介紹

    尚硅谷是國內一家領先的技術培訓機構,提供了眾多IT職業的培訓,包括Java、Python、大數據、前端、人工智能等方向。其官網地址為http://www.atguigu.com/。…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29
  • 百度地區熱力圖的介紹和使用方法

    本文將詳細介紹百度地區熱力圖的使用方法和相關知識。 一、什麼是百度地區熱力圖 百度地區熱力圖是一種用於展示區域內某種數據分佈情況的地圖呈現方式。它通過一張地圖上不同區域的顏色深淺,…

    編程 2025-04-29
  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • 使用Python爬蟲獲取電影信息的實現方法

    本文將介紹如何使用Python編寫爬蟲程序,來獲取和處理電影數據。需要了解基本的Python編程語言知識,並使用BeautifulSoup庫和Requests庫進行爬取。 一、準備…

    編程 2025-04-28
  • Python爬取網頁信息

    本文將從多個方面對Python爬取網頁信息做詳細的闡述。 一、爬蟲介紹 爬蟲是一種自動化程序,可以模擬人對網頁進行訪問獲取信息的行為。通過編寫代碼,我們可以指定要獲取的信息,將其從…

    編程 2025-04-28
  • Idea2022變更Git地址

    本文將從以下幾個方面對Idea2022變更Git地址進行詳細闡述: 一、GitHub上修改Git倉庫地址 1、登錄GitHub,找到需要修改的Git倉庫 2、在代碼頁面點擊右上角的…

    編程 2025-04-28
  • mysessioncontext 根據jessionid獲取session為空解決方法

    當我們在使用web應用程序開發時,mysessioncontext 根據jessionid獲取session為空是一個常見的錯誤。為了避免這個錯誤的發生,我們必須了解什麼是sess…

    編程 2025-04-28
  • 如何使用Python執行Shell命令並獲取執行過程信息

    本文將介紹如何使用Python執行Shell命令並獲取執行過程信息。我們將從以下幾個方面進行闡述: 一、執行Shell命令 Python內置的subprocess模塊可以方便地執行…

    編程 2025-04-28

發表回復

登錄後才能評論