線上服務(wù)咨詢
Article/文章
記錄成長點(diǎn)滴 分享您我感悟
您當(dāng)前位置>首頁 > 知識 > 網(wǎng)站建設(shè)
PHP通過IP
發(fā)表時(shí)間:2019-07-30 16:48:54
文章來源:沈陽軟件開發(fā)
標(biāo)簽:網(wǎng)站建設(shè) 小程序開發(fā) 小程序制作 微信小程序開發(fā) 公眾號開發(fā) 微信公眾號開發(fā) 網(wǎng)頁設(shè)計(jì) 網(wǎng)站優(yōu)化 網(wǎng)站排名 網(wǎng)站設(shè)計(jì) 微信小程序設(shè)計(jì) 小程序定制 微信小程序定制
瀏覽次數(shù):0
獲取當(dāng)前城市 PHP獲取IP地址
這個(gè)比較簡單,你可以使用PHP自帶的函數(shù),PHP中文手冊看看,有現(xiàn)成的例子,但更多的解釋,直接就代碼,
A部分:
$ xp_UserIp=($ _ SERVER ['HTTP_VIA'])?$ _ SERVER ['HTTP_X_FORWARDED_FOR']: $ _SERVER ['REMOTE_ADDR'];
$ xp_UserIp=($ xp_UserIp)?$ xp_UserIp: $ _SERVER ['REMOTE_ADDR'];>PHP通過IP地址判斷用戶所在城市
上面已經(jīng)獲得了用戶IP地址,然后我們根據(jù)該IP地址獲取用戶的城市。在我們開始之前,我們需要下載一個(gè)現(xiàn)成的數(shù)據(jù)庫QQIP數(shù)據(jù)庫。
附:最新騰訊QQIP數(shù)據(jù)庫2011.04.10純版下載
用法:解壓后QQWry.Dat是我們想要IP地址的數(shù)據(jù)庫,我們創(chuàng)建一個(gè)新的ipcity文件夾,把數(shù)據(jù)庫放在下面。 QQIP數(shù)據(jù)庫使用起來非常方便,數(shù)據(jù)也很齊全,可以及時(shí)關(guān)注官方更新,保持?jǐn)?shù)據(jù)最新,強(qiáng)烈推薦它:)
接下來,我們在上面的ipcity目錄中創(chuàng)建一個(gè)新的ipaddress.php文件,直接復(fù)制以下代碼,并評論重要的地方。
B節(jié):
/*函數(shù)名稱:ipCity
參數(shù)說明:$ userip——用戶IP地址
功能:PHP通過IP地址判斷用戶的城市
作者:杰森
聯(lián)系: admin@sslook.com */
functionipCity($ USERIP){
//IP數(shù)據(jù)庫路徑,這里是QQIP數(shù)據(jù)庫20110405純版
$ dat_path=” QQWry.dat”;
//確定IP地址是否有效
如果(!EREG( “^([0-9] {1,3})。{3} [0-9] {1,3} $”,$ USERIP)){
Return'IPAddressInvalid”;
}
//打開IP數(shù)據(jù)庫
如果(!$ FD=@的fopen($ dat_path,” RB”)){
Return'IPdatafilenotexistsoraccessdenied”;
}
//explode函數(shù)分解IP地址并計(jì)算整數(shù)形狀的結(jié)果
$ USERIP=爆炸(,$ USERIP“”);
$ useripNum=$ USERIP [0] * 16777216 + $ USERIP [1] * 65536 + $ USERIP [2] * 256 + $ USERIP [3];
//獲取IP地址索引的開始和結(jié)束位置
$ DataBegin=的fread($ FD,4);
$ DATAEND=的fread($ FD,4);
$ useripbegin=破滅(”解包(‘L’,$ DataBegin));
如果($ useripbegin℃,)$ useripbegin +=POW(2,32);
$ useripend=破滅(”解包(‘L’,$ DATAEND));
如果($ useripend℃,)$ useripend +=POW(2,32);
$ useripAllNum=($ $ useripend- useripbegin)/7 + 1;
$ BeginNum=0;
$ EndNum=$ useripAllNum;
//使用二進(jìn)制搜索方法從索引記錄中搜索匹配的IP地址記錄
而($ userip1num> $ useripNum || $ userip2num< $ useripNum){
$中東=INTVAL(($ EndNum + $ BeginNum)/2);
//將索引位置的偏移指針讀取為4個(gè)字節(jié)
FSEEK($ FD,$ useripbegin + 7 * $中);
$ useripData1=的fread($ FD,4);
如果(strlen的($ useripData1)LT; 4){<>
FCLOSE($ FD);
return'FileError”;
}
//提取數(shù)據(jù)轉(zhuǎn)換增長整形,如果數(shù)據(jù)為負(fù),則再加2到32次冪
$ userip1num=破滅(”解包(‘L’,$ useripData1));
如果($ userip1num℃,)$ userip1num +=POW(2,32);
//提取的長整數(shù)的數(shù)量大于我們的IP地址,并且為下一個(gè)循環(huán)修改結(jié)束位置
如果($ userip1num> $ useripNum){
$ EndNum=$中東;
繼續(xù);
}
//在取得上一個(gè)索引后取最后一個(gè)索引
$ DataSeek=的fread($ FD,3);
如果(strlen的($ DataSeek)LT; 3){<>
FCLOSE($ FD);
return'FileError”;
}
$ DataSeek=破滅(”解壓縮(‘L’,$ DataSeek.chr(0)));
FSEEK($ FD,$ DataSeek);
$ useripData2=的fread($ FD,4);
如果(strlen的($ useripData2)LT; 4){<>
FCLOSE($ FD);
return'FileError”;
}
$ userip2num=破滅(”解包(‘L’,$ useripData2));
如果($ userip2num℃,)$ userip2num +=POW(2,32);
//找不到與IP地址對應(yīng)的城市
如果($ userip2num< $ useripNum){
如果($中東==$ BeginNum){
FCLOSE($ FD);
Return'NoData”;
}
$ BeginNum=$中東;
}
}
$ useripFlag=的fread($ FD,1);
如果($ useripFlag==CHR(1)){
$ useripSeek=的fread($ FD,3);
如果(strlen的($ useripSeek)LT; 3){<>
FCLOSE($ FD);
Return'SystemError”;
}
$ useripSeek=破滅(”解壓縮(‘L’,$ useripSeek.chr(0)));
FSEEK($ FD,$ useripSeek);
$ useripFlag=的fread($ FD,1);
}如果($ useripFlag==CHR(2)){
$ AddrSeek=的fread($ FD,3);
如果(strlen的($ AddrSeek)LT; 3){<>
FCLOSE($ FD);
Return'SystemError”;
}
$ useripFlag=的fread($ FD,1);
如果($ useripFlag==CHR(2)){
$ AddrSeek2=的fread($ FD,3);
如果(strlen的($ AddrSeek2)LT; 3){<>
FCLOSE($ FD);
Return'SystemError”;
}
$ AddrSeek2=破滅(”解壓縮(‘L’,$ AddrSeek2.chr(0)));
FSEEK($ FD,$ AddrSeek2);
}否則{
FSEEK($ FD,-1,SEEK_CUR);
}
而(($焦炭=的fread($ FD,1))!=CHR(0))
$ useripAddr2=$炭;
$ AddrSeek=破滅(”解壓縮(‘L’,$ AddrSeek.chr(0)));
FSEEK($ FD,$ AddrSeek);而(($焦炭=的fread($ FD,1))!=CHR(0))
$ useripAddr1=$炭;}否則{
FSEEK($ FD,-1,SEEK_CUR);
而(($焦炭=的fread($ FD,1))!=CHR(0))
$ useripAddr1=$炭;
$ useripFlag=的fread($ FD,1);
如果($ useripFlag==CHR(2)){
$ AddrSeek2=的fread($ FD,3);
如果(strlen的($ AddrSeek2)LT; 3){<>
FCLOSE($ FD);
Return'SystemError”;
}
$ AddrSeek2=破滅(”解壓縮(‘L’,$ AddrSeek2.chr(0)));
FSEEK($ FD,$ AddrSeek2);
}否則{
FSEEK($ FD,-1,SEEK_CUR);
}
而(($焦炭=的fread($ FD,1))!=CHR(0)){
$ useripAddr2=$炭;
}}
FCLOSE($ FD);
//返回與IP地址對應(yīng)的城市結(jié)果如果(的preg_match(“/HTTP/I”,$ useripAddr2)){
$ useripAddr2=”;
}
$ useripaddr=” $ $ useripAddr1 useripAddr2” ;
$ useripaddr=preg_replace函數(shù)(“/CZ88.Net/is”,”,$ useripaddr);
$ useripaddr=preg_replace函數(shù)(“/^ S * /是”,”,$ useripaddr);
$ useripaddr=preg_replace函數(shù)(“/S * $ /是”,”,$ useripaddr);
如果(的preg_match(“/HTTP/I”,$ useripaddr)|| $ useripaddr==”){
$ useripaddr=”無數(shù)據(jù)”;
}
返回$ useripaddr;
}
?>
PHP根據(jù)IP地址實(shí)現(xiàn)城市切換或跳轉(zhuǎn)
此時(shí),問題已經(jīng)非常簡單,可以使用簡單的js完成。
C節(jié)如下:
//根據(jù)IP地址跳轉(zhuǎn)到指定的頁面js來獲取城市
Varcity=””;
//所有城市都根據(jù)IP地址跳轉(zhuǎn)到指定頁面
如果(city.indexOf( “上?!保T;=0){
Window.location.href=“http://shanghai.demo.com /”;
}
將第一段A段代碼和上面的C段代碼放在B段代碼的開頭和結(jié)尾,然后我們將以下代碼添加到需要跳轉(zhuǎn)的頁面中:
刷新頁面,是否達(dá)到了預(yù)期的效果?
網(wǎng)站建設(shè),小程序開發(fā),小程序制作,微信小程序開發(fā),公眾號開發(fā),微信公眾號開發(fā),網(wǎng)頁設(shè)計(jì),網(wǎng)站優(yōu)化,網(wǎng)站排名,網(wǎng)站設(shè)計(jì),微信小程序設(shè)計(jì),小程序定制,微信小程序定制