この記事では主に、PHP でユーザーの IP アドレスを取得する方法、PHP がユーザーの所在地の都市を IP に基づいて決定する方法、および PHP が IP に基づいて都市の切り替えまたはジャンプを実装する方法について説明します。
まずは個人がよく使うコードを見てみましょう
PHP
<?php include_once('./qqwry.php'); $QQWry=new QQWry; function get_real_ip(){ $ip=false; if(!empty($_SERVER["HTTP_CLIENT_IP"])){ $ip = $_SERVER["HTTP_CLIENT_IP"]; } if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']); if ($ip) { array_unshift($ips, $ip); $ip = FALSE; } for ($i = 0; $i < count($ips); $i++) { if (!eregi ("^(10|172\.16|192\.168)\.", $ips[$i])) { $ip = $ips[$i]; break; } } } return $ip; } function is_ip($str) { $ip = explode(".", $str); if (count($ip)<4 || count($ip)>4) return 0; foreach($ip as $ip_addr) { if ( !is_numeric($ip_addr) ) return 0; if ( $ip_addr<0 || $ip_addr>255 ) return 0; } return 1; } $ip=$_SERVER['REMOTE_ADDR']; $ifErr=$QQWry->QQWry($ip); $city = $QQWry->Country.$QQWry->Local; //echo $city;*/ if (strpos($city,'玄武区')!==false){ $city = "玄武区"; } else if(strpos($city,'仙林')!==false){ $city = "仙林"; } else if(strpos($city,'秦淮区')!==false){ $city = "秦淮区"; } else if(strpos($city,'江宁')!==false){ $city = "江宁"; } else if(strpos($city,'鼓楼')!==false){ $city = "鼓楼"; } else{ $city = "栖霞"; } if (isset($_GET['chengshi'])) { //Ê×Ïȼì²âÊÇ·ñ»ñµÃÁË GET ´«µÝµÄÊý¾Ý setcookie("cookie_city",$_GET['chengshi'],time()+3600*24); $city = $_GET['chengshi']; } else if (isset($_COOKIE["cookie_city"])) { //¼ì²âÊÇ·ñ´æÔÚêdzÆCookie $city = $_COOKIE["cookie_city"]; //ÏÔʾCookie±£´æµÄÊý¾Ý } else { setcookie("cookie_city",$city,time()+3600*24); //´¿³õʼ»¯´Ë±äÁ¿ $_COOKIE["cookie_city"] = $city; } ?>
HTML
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8"/> <LINK href="css/css.css" type=text/css rel=stylesheet> <SCRIPT src="js/jquery-1.4.2.min.js" type=text/javascript></SCRIPT> <title>城市切换</title> </head> <BODY> <p class=selCity id=allCity style="DISPLAY: none"> <p class=area> <TABLE> <TBODY> <TR> <TD><A class=cur href="show.html">玄武区</A></TD> <TD><A href="show1.html">仙林</A></TD> <TD><A href="show2.html">秦淮区</A></TD> <TD><A href="show3.html">鼓楼</A></TD> <TD><A href="show4.html">江宁</A></TD> <TD><A href="show5.html">栖霞区</A></TD> </TR> </TBODY></TABLE> <p class=none><A id=foldin href="javascript:;">全部</A></p></p></p> <p class=header> <p class=area> <p class=r> <p class="topCtiy clear"> <UL> <LI class=i1><A href="index.php">全部小区</A></LI> <LI class=i1> <?php echo $city; ?> </LI> <LI class=i2 id=changeCity>切换城市</LI> </UL> </p> </p> </p> </p> <SCRIPT type=text/javascript> jQuery(function(){ $("#changeCity").click(function(a){ $("#allCity").slideDown(300); a.stopPropagation(); $(this).blur(); }); $("#allCity").click(function(a){ a.stopPropagation() }); $(document).click(function(a){ a.button!=2 && $("#allCity").slideUp(300) }); $("#foldin").click(function(){ $("#allCity").slideUp(300) }); }); </SCRIPT> </body> </html>
さらに、ネチズンの実装方法も添付します:
使用方法: 解凍後、QQWry.Dat が必要な IP アドレス データベースになります。新しい ipcity フォルダーを作成し、そのデータベースを以下に配置します。 QQ IP データベースは非常に使いやすく、データは非常に完全なので、公式の更新を遅れずにフォローして、データを最新の状態に保つことができます。
#次に、新しいデータベースを作成します。上記の ipcity ディレクトリにある ipaddress.php ファイルに、次のコードをコピーするだけです。重要な場所にもそれに応じてコメントが付けられます。セクション 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]{1,3}$", $userip)){ return 'IP Address Invalid'; } //打开IP数据库 if(!$fd = @fopen($dat_path, 'rb')){ return 'IP data file not exists or access denied'; } //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地址记录 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); return 'File Error'; } //提取出来的数据转换成长整形,如果数据是负数则加上2的32次幂 $userip1num = implode('', unpack('L', $useripData1)); if($userip1num < 0) $userip1num += pow(2, 32); //提取的长整型数大于我们IP地址则修改结束位置进行下一次循环 if($userip1num > $useripNum) { $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); $useripData2 = fread($fd, 4); if(strlen($useripData2) < 4) { fclose($fd); return 'File Error'; } $userip2num = implode('', unpack('L', $useripData2)); if($userip2num < 0) $userip2num += pow(2, 32); //找不到IP地址对应城市 if($userip2num < $useripNum) { if($Middle == $BeginNum) { fclose($fd); return 'No Data'; } $BeginNum = $Middle; } } $useripFlag = fread($fd, 1); if($useripFlag == chr(1)) { $useripSeek = fread($fd, 3); if(strlen($useripSeek) < 3) { fclose($fd); return 'System Error'; } $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 'System Error'; } $useripFlag = fread($fd, 1); if($useripFlag == 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)) $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 '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)){ $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 = 'No Data'; } return $useripaddr; } ?>PHP は IP アドレスに基づいて都市の切り替えまたはジャンプを実現します この時点での問題は実際には非常に簡単で、単純な JS で解決できます。セクション C は次のとおりです。
//根据IP地址跳转指定页面js取得城市 var city='<?echo ipCity($xp_UserIp);?>'; //根据IP地址所有城市跳转到指定页面 if(city.indexOf("上海市")>=0){ window.location.href="http://shanghai.demo.com/"; }先頭の A セクション コードと上記の C セクション コードをそれぞれ B セクション コードの先頭と末尾に配置し、必要なページに次のコードを追加します。ジャンプされる: ページを更新します毛織物が望ましい効果を達成するかどうかを確認してください。
要約: 以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。
関連する推奨事項:
PHP が DOMDocument に基づいて XML を解析および生成する方法の詳細な説明
PHP XMLWriter の xml 操作メソッドに基づいて実装
PHP のオブジェクト指向 mysqli 拡張ライブラリに基づいてツール クラスを追加、削除、変更、チェックするメソッド
以上がPHPでユーザーのIPアドレスを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

tomodifydatainaphpsession、starthessession withsession_start()、$ _sessiontoset、modify、orremovevariables.1)startthessession.2)

配列はPHPセッションに保存できます。 1。セッションを開始し、session_start()を使用します。 2。配列を作成し、$ _Sessionで保存します。 3. $ _Sessionを介して配列を取得します。 4.セッションデータを最適化してパフォーマンスを向上させます。

PHPセッションガベージコレクションは、有効期限が切れたセッションデータをクリーンアップするために確率メカニズムを通じてトリガーされます。 1)構成ファイルにトリガー確率とセッションのライフサイクルを設定します。 2)Cronタスクを使用して、高負荷アプリケーションを最適化できます。 3)データの損失を避けるために、ごみ収集の頻度とパフォーマンスのバランスを取る必要があります。

PHPでのユーザーセッションアクティビティの追跡は、セッション管理を通じて実装されます。 1)SESSION_START()を使用してセッションを開始します。 2)$ _Sessionアレイを介してデータを保存およびアクセスします。 3)セッションを終了するには、session_destroy()を呼び出します。セッショントラッキングは、ユーザーの動作分析、セキュリティ監視、パフォーマンスの最適化に使用されます。

データベースを使用してPHPセッションデータを保存すると、パフォーマンスとスケーラビリティが向上します。 1)MySQLを構成してセッションデータを保存します:PHP.iniまたはPHPコードでセッションプロセッサを設定します。 2)カスタムセッションプロセッサを実装します:データベースと対話するために、開いて、閉じ、読み取り、書き込み、その他の機能を定義します。 3)最適化とベストプラクティス:インデックス、キャッシュ、データ圧縮、分散ストレージを使用して、パフォーマンスを向上させます。

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









