Home  >  Article  >  Backend Development  >  Determine the city based on the IP address in PHP to implement city switching or jump code_PHP tutorial

Determine the city based on the IP address in PHP to implement city switching or jump code_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:16:331041browse

获取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();
?>

方法二
复制代码 代码如下:

function getip ()
{
                if (getenv('http_client_ip')) {
                        $ip = getenv('http_client_ip');
                } else if (getenv('http_x_forwarded_for')) {
                        $ip = getenv('http_x_forwarded_for');
                } else if (getenv('remote_addr')) {
                        $ip = getenv('remote_addr');
                } else {
                        $ip = $_server['remote_addr'];
                }
                return $ip;

PHP通过IP地址判断用户所在城市
上文已经获得了用户IP地址,接下来,我们就是根据这个IP地址获得用户所在城市了。开始之前,我们需要下载一个现成的数据库QQ IP数据库。
最新IP地址数据库:http://www.jb51.net/softs/10529.html
使用方法:解压后QQWry.Dat就是我们想要IP地址数据库,我们新建一个ipcity文件夹,将数据库放在下面。QQ IP数据库使用非常方便,数据也很齐全,你可以及时关注官方更新以保持数据最新,强力推荐一下:)
接下来,我们在上面的ipcity目录下新建一个ipaddress.php文件,直接复制以下代码进去即可,重要的地方也作了相应注释。B段:
复制代码 代码如下:

/*
Function name: ipCity
Parameter description: $userip——user IP address
Function function: PHP determines the city where the user is located through the IP address
author:lee
contact:xpsem2010@gmail.com
*/
function ipCity($userip) {
//IP database path, the pure version of QQ IP database 20110405 used here
$dat_path = 'QQWry.dat';
//Determine whether the IP address is valid
if(!ereg("^([0-9]{1,3}.){3}[0-9 | , 'rb')){
                                                                                                           return 'IP data file not exists or access denied'; ('.', $userip);
$useripNum = $userip[0] * 16777216 + $userip[1] * 65536 + $userip[2] * 256 + $userip[3];
// Get the start and end position of the IP address index
$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) ;
$EndNum = $useripAllNum;
//Use binary search method to search for matching IP address records from the index records
while($userip1num>$useripNum || $userip2num<$useripNum) {
$Middle= intval(($EndNum + $BeginNum) / 2);
//Offset the pointer to the index position to read 4 bytes
fseek($fd, $useripbegin + 7 * $Middle);
$useripData1 = fread($fd, 4);
if(strlen($useripData1) < 4) {
fclose($fd);
return 'File Error';
}
//The extracted data is converted into a long integer. If the data is a negative number, 2 raised to the 32nd power is added.
$userip1num = implode('', unpack('L', $useripData1));
If($userip1num < 0) $userip1num += pow(2, 32);
//If the extracted long integer is greater than our IP address, modify the end position for the next cycle
if($userip1num > $useripNum) {
           $EndNum = $Middle;
                                                                                                                                                                                                                                                            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) {
                                                                                                                                                                    
        $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 {
                                                                                                                                                                                                                  .= $char;
}
}
fclose($fd);
//Return the city result corresponding to the IP address
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; > Section C is as follows:
// Jump to the specified page js to get the city based on the IP address



Copy the code
The code is as follows:


var city='';
//Jump to the specified page based on IP address for all cities
Copy the code

The code is as follows:

if(city.indexOf("Shanghai City")>=0){
     window.location.href=" http://shanghai.demo.com/";
}Place the beginning A segment code and the above C segment code at the beginning and end of the B segment code respectively, and then we Add the following code to the page that needs to be redirected:

Copy the code

The code is as follows:


Refreshing the page, does it achieve the desired effect? The above code simply determines where the IP is and jumps there. If something like this appears, I want to jump all the IPs in Hunan to Changsha. For example, Hengyang, Liuyang, Leiyang, etc. will have to be copied multiple times. The thread has been processed. If you want to know, please watch the next episode.
http://www.bkjia.com/PHPjc/325883.html

www.bkjia.com

true
http: //www.bkjia.com/PHPjc/325883.html

TechArticleGet the IP address and copy the code as follows: ?php function GetIP() { if ($_SERVER["HTTP_X_FORWARDED_FOR"] ) $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; else if ($_SERVER["HTTP_CLIENT_IP"])...
Statement:
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