ホームページ >php教程 >php手册 >PHP で IP アドレスに基づいて都市を決定し、都市切り替えまたはジャンプ コードを実装します。

PHP で IP アドレスに基づいて都市を決定し、都市切り替えまたはジャンプ コードを実装します。

WBOY
WBOYオリジナル
2016-06-13 11:58:18828ブラウズ

IP アドレスを取得

コードをコピー コードは次のとおりです。


function GetIP() {
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";
return $ip;
}
echo GetIP();
?> ;


方法 2

コードをコピー コードは次のとおりです。


function getip ( )
{
🎜> $ip = getenv('http_x_forwarded_for );
$ip = $_server['remote_addr'] <🎜 ユーザーがいる都市。開始する前に、既製のデータベース QQ IP データベースをダウンロードする必要があります。
最新の IP アドレス データベース: http://www.jb51.net/softs/10529.html
使用方法: 解凍後、QQWry.Dat が必要な IP アドレス データベースになります。新しい ipcity を作成します。フォルダを指定して配置します。 以下にデータベースを配置します。 QQ IP データベースは非常に使いやすく、データは非常に完成していますので、公式の更新に遅れずに従うことができ、データを最新の状態に保つことができます。
次に、新しい ipaddress.php を作成します。上記の ipcity ディレクトリにあるファイルを直接コピーして、次のコードを入力するだけです。重要な箇所もそれに応じてコメントされています。セクション B:



コードをコピー

コードは次のとおりです:


/*
関数名: ipCity
パラメータの説明: $userip—ユーザー IP アドレス
関数: PHP は、 IP アドレス
author:lee
contact:xpsem2010@gmail.com
*/
function ipCity($userip) {
//IP データベース パス、QQ IP データベースの純粋なバージョン 20110405ここで使用します
$dat_path = 'QQWry.dat';
//IP アドレスが有効かどうかを判断します
if(!ereg("^([0-9]{1,3}.){ 3}[0-9 | , 'rb')){
Return 'IP データ ファイルが存在しないか、アクセスが拒否されました' ('.', $userip);
$useripNum = $userip[0] * 16777216 $userip[1] * 65536 $userip[2] * 256 $userip[3];
//IP アドレスのインデックス開始位置と終了位置を取得
$DataBegin = fread($fd, 4);
$DataEnd = fread($fd, 4);
$useripbegin = implode('', unpack('L', $DataBegin));
if($useripbegin < 0) $useripbegin = pow( 2, 32);
$useripend = implode('', unpack('L', $DataEnd));
if($useripend < 0) $useripend = pow(2, 32);
$useripAllNum = ($useripend - $useripbegin) / 7 1;
$BeginNum = 0;
$EndNum = $useripAllNum;
//二分検索メソッドを使用して、インデックスから一致する IP アドレス レコードを検索しますrecords
while($userip1num>$useripNum || $userip2num<$useripNum) {
$Middle= intval((( $EndNum $BeginNum) / 2);
// インデックスへのポインタをオフセットします位置を決めて 4 バイトを読み取ります
fseek($fd, $useripbegin 7 * $Middle);
$useripData1 = fread( $fd, 4);
If(strlen($useripData1) <4) {
fclose($fd);
データが負の数の場合は、2 の 32 乗を加算します。
$userip1num = implode('', unpack('L) ', $useripData1));
if($userip1num < 0 ) $userip1num = pow(2, 32);
//抽出された長整数が IP アドレスより大きい場合、終了位置を変更します次のサイクル
if($ userip1num&gt; $ useripnum){
$ endnum = $ middle;
($ dataseek)&lt; > fseek($fd, $DataSeek);
$useripData2 = fread($fd, 4);
if(strlen($useripData2) < 4) {
fclose($fd);
$userip2num = implode('', unpack('L', $useripData2));
if($userip2num < 0) $userip2num = pow(2, 32);
//找不到IP地址对应城市
if($userip2num < $useripNum) {
if($Middle == $BeginNum) {
fclose($fd);
return 'データなし';
}
$BeginNum = $Middle;
}
}
$useripFlag = fread($fd, 1);
if($useripFlag == chr(1) )) {
$useripSeek = fread($fd, 3);
if(strlen($useripSeek) < 3) {
fclose($fd);
return 'システム エラー';
}
$useripSeek = implode('', unpack('L', $useripSeek.chr(0)));
fseek($fd, $useripSeek);
$useripFlag = fread($fd, 1);
}
if($useripFlag == chr(2)) {
$AddrSeek = fread($fd, 3);
if(strlen($AddrSeek) < 3) {
fclose($fd);
return 'システム エラー';
}
$useripFlag = fread($fd, 1);
if($useripFlag == (2) ) {
$AddrSeek2 = fread($fd, 3);
if(strlen($AddrSeek2) < 3) {
fclose($fd);
return 'システムエラー';
}
$AddrSeek2 = implode('', unpack('L', 2.chr(0)) );
fseek($fd, $AddrSeek2);
} else {
fseek($fd, -1, SEEK_CUR);
}
while(($char = f読み取り($ fd, 1)) != chr(0))
$useripAddr2 .= $char;
$AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));
fseek($fd, $AddrSeek);
while(($char = fread($fd, 1)) != chr(0))
$useripAddr1 .= $char;
} else {
fseek($fd, -1, SEEK_CUR);
while(($char = fread($fd, 1)) != chr(0))
$useripAddr1 .= $char;
$useripFlag = fread($fd, 1);
if($useripFlag == chr(2)) {
$AddrSeek2 = fread($fd, 3);
if(strlen($ AddrSeek2) < 3) {
fclose($fd);
return 'システム エラー';
}
$AddrSeek2 = implode('', unpack( 'L'、$AddrSeek2.chr (0)));
fseek($fd, $AddrSeek2);
}else {
.= $char;
}
}
fclose($fd);
//都市を返すIP アドレスに対応する結果
if(preg_match('/ http/i', $useripAddr2 )) {
$useripAddr2 = '';
}
$useripAddr = "$useripAddr1 $useripAddr2";
$useripAddr = preg_replace('/CZ88.Net/ is', '', $ useripaddr);
$useripaddr = preg_replace('/^s*/is', '', $useripaddr);
$useripaddr = preg_replace('/s*$/is' , '', $useripaddr) ;
if(preg_match('/http/i', $useripaddr) || $useripaddr == '') {
$useripaddr = 'データなし';
}
$useripaddr を返す >セクション C は次のとおりです。
// 指定されたページ js にジャンプして、IP アドレスに基づいて都市を取得します



コードをコピーします

コードは次のとおりです次のように:


var city='';

//IP に基づいて指定されたページにジャンプしますすべての都市のアドレス

コードをコピーします


コードは次のとおりです:


if(city.indexOf("Shanghai City" )>=0){
window.location.href=" http://shanghai.demo.com/";

}先頭のAセグメントコードと、上記の C セグメント コードを B セグメント コードの先頭と末尾にそれぞれ追加し、リダイレクトする必要があるページに次のコードを追加します。


コードをコピー

コードは次のとおりです。



ページを更新すると、期待した効果が得られますか? 上記のコードは単純に IP アドレスを決定し、このようなことが起こった場合、湖南省のすべての IP アドレスを長沙にジャンプする必要があります。複数の親操作が処理されました。知りたい場合は、次のエピソードをご覧ください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。