ホームページ > バックエンド開発 > PHPチュートリアル > PHP は IP アドレスに基づいて都市を決定し、都市切り替えまたはジャンプ コードを実装します_PHP チュートリアル

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

WBOY
リリース: 2016-07-20 11:11:04
オリジナル
931 人が閲覧しました

最初に IP アドレスを取得するのは非常に簡単です。次に、IP アドレスを取得するための 2 つのコードを紹介します。その後、QQIP ライブラリを使用して現在の IP が属する IP セグメントを確認し、都市フィールドを取得する必要があります。返してください。

IPアドレスを取得します

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

function GetIP() {
= $_SERVER["HTTP_X_FORWARDED_FOR"
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"); $ip 方法 2 , $ip = getenv('remote_addr');
$ _server ['remote_addr'];

詳細については、http://www.bkjia.com/phper/php/33938.htm を参照してください。

PHP は、IP アドレスを通じてユーザーの所在地の都市を特定します
ユーザーの IP アドレスは取得されています上、次、この IP アドレスに基づいてユーザーの所在地の都市を取得します。開始する前に、既製のデータベース QQ IP データベースをダウンロードする必要があります。

最新の IP アドレス データベース: http://8.zjdx2.crsky.com/201209/qqwry0830.rar

使用方法: 解凍後の QQWry.Dat が、新しい ipcity を作成します。フォルダを指定して配置します。 以下にデータベースを配置します。 QQ IP データベースは非常に使いやすく、データは非常に充実しています。公式の更新を遅れずにフォローして、データを最新の状態に保つことができます。
次に、新しい ipaddress.php ファイルを作成します。上記の ipcity ディレクトリに移動し、次のコードを直接コピーします。 中に入るだけで、重要な場所にもそれに応じて注釈が付けられます。セクション B:

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

/*
関数名: ipCity
パラメータの説明: $userip - ユーザーのIPアドレス
関数関数: PHPがユーザーを決定しますIP アドレス別 City
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]{1,3}$ ", $userip )){
""""""""""" "" ';
}

//explode 関数は IP アドレスを分解し、演算により整数の結果が得られます
$userip =explode(' .', $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アドレスレコードを一致させる場合($ userip1num&gt; $ useripnum || $ userip2num&lt; $ useripnum){

$ middle = intval(($ endnum + $ beginnum) / 2);インデックス位置に移動して 4 バイトを読み取ります

fseek($fd, $useripbegin + 7 * $Middle) = FREAD ($ fd, 4);
If (Strlen ($ Useripdata1) & LT; 4) {

fclose ($ fd);

Return 'File Error';
}
}}} データは負であり、2 回の 32 乗

$ userip1num = Implode ('', unpack ('l', $ useripdata1)) ; if($ userip1num&lt; 0)$ userip1num += pow(2、32);个 // 前のインデックスを取得した後、インデックスを削除します

$ dataseek = FREAD ($ fd, 3);
fclose ($ fd);
Return 'File Error ';
}
$DataSeek = implode('', unpack('L', $DataSeek.chr(0))); $DataSeek U if ($ userip2num & lt; 0) $ userip2num += POW ( 2, 32);

// 都市に対応する IP アドレスが見つかりません
($ userip2num & lt; $ useripnum) {
if ($ middle == $ $ BeginNum) {
fclose($fd);

$useripFlag = fread($fd, 1);
if($useripFlag == chr(1)) {
$useripSeek = implode('', unpack('L', $useripSeek.chr(0)) ); $useripFlag == chr(2)) {
U​​ $ useripflag = FREAD ($ fd, 1)

if ($ useripflag == chr (2); $ addrseek2 = fread($ fd、3);

$AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));

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 {
fseek($fd, -1, SEEK_CUR);
}
しながら(( $char = fread($fd, 1)) != chr(0)){
$useripAddr2 .= $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 = 'データなし';
}

return $useripaddr;
}
?>

PHPベースIP地址实现城市切换または跳转
ここに来ました、その問題はすでに解決されており、単一の js を使用して通過します。 セグメントは次のとおりです:
//IP アドレスに基づいて面指定を取得城市

var city= '';//根据IP地址全城市指定页面へ跳转
代コード通り

代码如下复制代if( city.indexOf("上海市")>=0){ window.location.href="http://shanghai.demo.com/";将开头的第二代网和上面の C フラグメントは、B フラグメントのブロックと尾に個別に放出され、その後、必要なジャンプ衵面に以下のコードを追加します。 /ipaddress.php" type="text/javascript" language="javascript">
}



ページを更新すると、期待どおりの効果が得られますか?

上記のコードは単純にIPアドレスを決定してそこにジャンプします。このようなものが表示された場合、湖南省のすべてのIPアドレスを長沙にジャンプしたいので、複数作成する必要があります。親の行は処理されています。知りたい場合は、次のエピソードをご覧ください。


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/444682.html技術記事最初に IP アドレスを取得するのは非常に簡単です。次に、IP アドレスを取得するための 2 つのコードを紹介します。その後、QQIP ライブラリを使用して現在の IP が属する IP セグメントを確認し、都市フィールドを取得する必要があります。返してください。 わかった…
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート