Home Backend Development PHP Tutorial PHP implements multi-city switching special effects_php skills

PHP implements multi-city switching special effects_php skills

May 16, 2016 pm 08:08 PM

Let’s first take a look at the codes that are commonly used by individuals
PHP
<&#63;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'])) { //&Ecirc;×&Iuml;&Egrave;&frac14;ì&sup2;&acirc;&Ecirc;&Ccedil;·&ntilde;&raquo;&ntilde;&micro;&Atilde;&Aacute;&Euml; GET &acute;&laquo;&micro;&Yacute;&micro;&Auml;&Ecirc;&yacute;&frac34;&Yacute;  
setcookie("cookie_city",$_GET['chengshi'],time()+3600*24);
$city = $_GET['chengshi']; 
} 
else if (isset($_COOKIE["cookie_city"])) { //&frac14;ì&sup2;&acirc;&Ecirc;&Ccedil;·&ntilde;&acute;&aelig;&Ocirc;&Uacute;ê&Ccedil;&sup3;&AElig;Cookie  
$city = $_COOKIE["cookie_city"]; //&Iuml;&Ocirc;&Ecirc;&frac34;Cookie±&pound;&acute;&aelig;&micro;&Auml;&Ecirc;&yacute;&frac34;&Yacute; 
} 
else {  
setcookie("cookie_city",$city,time()+3600*24); //&acute;&iquest;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&acute;&Euml;±&auml;&Aacute;&iquest; 
$_COOKIE["cookie_city"] = $city;
} 
&#63;>
Copy after login
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>
<DIV class=selCity id=allCity style="DISPLAY: none">
<DIV 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>
<DIV class=none><A id=foldin href="javascript:;">全部</A></DIV></DIV></DIV>
<DIV class=header>
  <DIV class=area>
    <DIV class=r>
      <DIV class="topCtiy clear">
        <UL>
         
        <LI class=i1><A href="index.php">全部小区</A></LI>
         
         <LI class=i1>
         <&#63;php 
         echo $city; 
         &#63;>
         </LI>
         <LI class=i2 id=changeCity>切换城市</LI>
        </UL>
      </DIV>
    </DIV>
  </DIV>
</DIV>
<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>
Copy after login
Attached is also the implementation method from netizens:
How to use: After decompression, QQWry.Dat is the IP address database we want. We create a new ipcity folder and place the database below. The QQ IP database is very easy to use and the data is very complete. You can follow the official updates in time to keep the data up to date. I highly recommend it:)
Next, we create a new ipaddress.php file in the ipcity directory above and just copy the following code into it. The important places are also commented accordingly. Section B:
<&#63;
/*
函数名称: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;
}
&#63;>
Copy after login
PHP implements city switching or jump based on IP address
At this point, the problem is actually very simple. It can be solved with simple js. Paragraph C is as follows:
//根据IP地址跳转指定页面js取得城市
var city='<&#63;echo ipCity($xp_UserIp);&#63;>';

//根据IP地址所有城市跳转到指定页面
if(city.indexOf("上海市")>=0){
    window.location.href="http://shanghai.demo.com/";
}
Copy after login
Place the beginning A segment of code and the above C segment of code at the beginning and end of the B segment of code respectively, and then we add the following code to the page that needs to be jumped:
Refresh the page. Does it achieve the desired effect?
The above is a detailed introduction to PHP obtaining IP address, PHP judging city based on IP address, and PHP implementing city switching or jumping based on IP address. In fact, automatic city switching through IP address in PHP is a typical application of this method. . By analogy, we can also block user access from specified IP addresses or cities through this method. Do your own research, it’s quite simple:)
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Working with Flash Session Data in Laravel Working with Flash Session Data in Laravel Mar 12, 2025 pm 05:08 PM

Laravel simplifies handling temporary session data using its intuitive flash methods. This is perfect for displaying brief messages, alerts, or notifications within your application. Data persists only for the subsequent request by default: $request-

cURL in PHP: How to Use the PHP cURL Extension in REST APIs cURL in PHP: How to Use the PHP cURL Extension in REST APIs Mar 14, 2025 am 11:42 AM

The PHP Client URL (cURL) extension is a powerful tool for developers, enabling seamless interaction with remote servers and REST APIs. By leveraging libcurl, a well-respected multi-protocol file transfer library, PHP cURL facilitates efficient execution of various network protocols, including HTTP, HTTPS, and FTP. This extension offers granular control over HTTP requests, supports multiple concurrent operations, and provides built-in security features.

Simplified HTTP Response Mocking in Laravel Tests Simplified HTTP Response Mocking in Laravel Tests Mar 12, 2025 pm 05:09 PM

Laravel provides concise HTTP response simulation syntax, simplifying HTTP interaction testing. This approach significantly reduces code redundancy while making your test simulation more intuitive. The basic implementation provides a variety of response type shortcuts: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

PHP Logging: Best Practices for PHP Log Analysis PHP Logging: Best Practices for PHP Log Analysis Mar 10, 2025 pm 02:32 PM

PHP logging is essential for monitoring and debugging web applications, as well as capturing critical events, errors, and runtime behavior. It provides valuable insights into system performance, helps identify issues, and supports faster troubleshoot

12 Best PHP Chat Scripts on CodeCanyon 12 Best PHP Chat Scripts on CodeCanyon Mar 13, 2025 pm 12:08 PM

Do you want to provide real-time, instant solutions to your customers' most pressing problems? Live chat lets you have real-time conversations with customers and resolve their problems instantly. It allows you to provide faster service to your custom

Explain the concept of late static binding in PHP. Explain the concept of late static binding in PHP. Mar 21, 2025 pm 01:33 PM

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

Customizing/Extending Frameworks: How to add custom functionality. Customizing/Extending Frameworks: How to add custom functionality. Mar 28, 2025 pm 05:12 PM

The article discusses adding custom functionality to frameworks, focusing on understanding architecture, identifying extension points, and best practices for integration and debugging.

See all articles