php 判断来访IP地址是国内还是国外的

php 判断来访IP地址是国内还是国外的,第1张

PHP服务器变量(环境变量)中的客户端IP地址

炒一个给你:

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {

$ip = $_SERVER['HTTP_CLIENT_IP'];

} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {

$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

} else {

$ip = $_SERVER['REMOTE_ADDR'];

}

function ip() {

if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {

$ip = getenv('HTTP_CLIENT_IP');

} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {

$ip = getenv('HTTP_X_FORWARDED_FOR');

} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {

$ip = getenv('REMOTE_ADDR');

} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {

$ip = $_SERVER['REMOTE_ADDR'];

}

return preg_match ( '/[\d\]{7,15}/', $ip, $matches ) $matches [0] : '';

}

以上函数取自phpcms的获取ip方法

server启动之后,查看他的IP地址是多少,这个就不赘述了,假如看到的是19216812,在看你当时做虚拟主机的端口是多少,默认一个是80,在另外一台机器上,打开浏览器,输入http://19216812:80 就可以访问了,具体参数查看你的服务器的设置。另外一个网站的访问http://19216812:X, 80和X的端口号具体是多少,你应该清楚,或者上apache去查吧

如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面。

下面提供一个函数:<php

// 定义一个函数getIP()

function getIP(){global $ip;

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 = "Unknow";

return $ip;}

// 使用方法:

echo getIP();>

getenv("REMOTE_ADDR")用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 来读取。

但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值将是空的。

else if(getenv("HTTP_X_FORWARDED_FOR"))

$ip = getenv("HTTP_X_FORWARDED_FOR");

表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真实IP值。

如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");这一行语句。

这种情况下已经确认客户端没有使用代理服务器,从而通过

else if(getenv("REMOTE_ADDR"))

这两行语句获得客户端的IP地址也是真实的IP地址。

1确认执行该PHP脚本的系统具备修改服务器IP/子网掩码/网关的权限

2确认你的PHP运行执行shell_exec的函数,这个函数在安全模式下是被屏蔽的

3确认你在shell_exec里面执行的系统命令行是正确的

简单的例子:

$ vi testphp

#!/usr/bin/php

<php

$rsl = shell_exec("fconfig eth0 19216812 netmask 2552552550"); //改ip和子网掩码的

$rsl2 = shell_exec("route add default gw 19216811"); //设置网关

echo $rsl"\n"$rsl2;//看看返回的结果

>

$ chmod 755 testphp -- 给脚本增加执行的权限

$ /testphp

参考其他函数:

exec()

system()

等等

windows下怎么做

我又没钱买windows我怎么知道!

理论上不可能获得真实的客户IP地址,只能获得最后一次路由器、或者代理服务器的IP地址。典型的情况是对方也在局域网、或者防火墙的后面,我们是不可能获得他真实的IP地址的,其实获取来也没有,一般是19216812这样的私有地址,甚至很可能所有的客户机都是这个网段。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » php 判断来访IP地址是国内还是国外的

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情