php抓取网页域名(获取客户端真正方法.使用php获取IP的方法能找到)
优采云 发布时间: 2022-04-19 22:10php抓取网页域名(获取客户端真正方法.使用php获取IP的方法能找到)
我最近在做的一个项目使用了获取域名和IP的功能。大致有以下几种方法。
获取域名IP的方法可以使用内置函数gethostbyname来获取,例如:
echo gethostbyname("www.jbxue.com");
上面会直接输出域名对应的IP。当然不同地方的测试结果是不一样的,因为百度服务器不止一台,我这边的ip是115.239.210.27;
下面是获取域名的方法,比如有这样一个URL:
//则会输出www.jbxue.com
//全局数组
echo $_SERVER[“HTTP_HOST”];
如果我在本地测试,它将输出 localhost
第二种获取域名的方法是使用:parse_url函数;
$url ="http://www.jbxue.com/index.php?referer=kakata.com";
$arr=parse_url($url);
echo "
";
print_r($arr);
echo "
“;
这段代码得到一个数组,当我们打印这个数组时,你会一目了然;
大批
(
[方案] => http
[主持人] =>
[路径] => /index.php
[查询] => 推荐人=
)
scheme对应协议,host对应域名,path对应执行文件路径,query对应相关参数;
php获取域名信息的第三种方法:
对于同一个域名,我们使用第三种方式获取域名,我们使用自定义函数获取。
$url ="http://www.jbxue.com/index.php?referer=jbxue.com";
get_host($url);
function get_host($url){
//首先替换掉http://
$url=str_replace("http://","",$url);
//获得去掉http://url的/最先出现的位置
$position=strpos($url,"/");
//如果没有斜杠则表明url里面没有参数,直接返回url,
//否则截取字符串
if($position==false){
echo $url;
}else{
echo substr($url,0,$position);
}
}
?>
最后一种方法是使用常规规则。这一步比较复杂。要实现复杂的域名匹配,需要更复杂的正则规则。我只是提供一些想法,大家应该多尝试。
header("Content-type:text/html;charset=utf-8");
$url ="http://www.jbxue.com/index.php?referer=jbxue.com";
$pattern="/(http:\/\/)?(.*)\//";
if(preg_match($pattern,$url,$arr)){
echo "匹配成功";
echo "匹配到了".$arr[2];
}
?>
php获取客户端IP地址的几种方法
阅读php获取客户端IP地址的几种方法,
1:来看看代码:
echo "(1)浏览当前页面的用户的 IP 地址为:";
echo $_SERVER['REMOTE_ADDR'];
echo "";
echo "(2)浏览当前页面的用户的 IP 地址为:";
echo getenv('REMOTE_ADDR');
echo "";
echo "主机 www.baidu.com 的 IP 地址为:";
echo gethostbyname(www.baidu.com);
2:它的输出结果为:
(1)浏览当前页面的用户的 IP 地址为:127.0.0.1
(2)浏览当前页面的用户的 IP 地址为:127.0.0.1
主机 www.baidu.com 的 IP 地址为:61.135.169.105
3:关于获取客户端的 IP 地址,有俩方法:
第一个是使用:
$_SERVER['REMOTE_ADDR']
它正在浏览当前页面用户的 IP 地址,这里的输出结果为 127.0.0.1,因为这是在本地测试,输出的是我本地的环路地址。
第俩个是使用:
getenv('REMOTE_ADDR')
这里使用了函数 getenv : Gets the value of an environment variable(得到各种环境变量的值),返回值:Returns the value of the environment variable varname, or FALSE on an error(失败的话返回 FALSE).
4:关于获取服务器端的 IP 地址:
gethostbyname(www.baidu.com)
这里使用了函数 gethostbyname : Get the IP address corresponding to a given Internet host name(通过给定的一个主机名字而得到它的 IP 地址),返回值:Returns the IP address of the Internet host specified by hostname or a string containing the unmodified hostname on failure(失败的话返回原样的输入字符主机名).
5:注意这里的最后一句,也就是说,如果失败的话,它会将原样输出,
例如:
echo "无效主机 iwilldown 的 IP 地址为:";
echo gethostbyname("iwilldown");
输出无效主机 iwilldown 的 IP 地址为:iwilldown 当然,这个可不是 IP 地址….~~~~
获取客户端IP其实并不是一件简单的事情。由于IP欺骗和代理问题,获取客户端IP的真实性会打折扣,不能100%准确。但我们仍在努力寻找更完善的获客解决方案。终端的真实ip方法。使用php获取IP的方法有很多种。
function getIp(){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return($ip);
现在我们需要解释这段代码。这里使用了两个函数,getenv() 和 strcasecmp()。前一个函数获取系统的环境变量。如果能获取到值,则返回该值,否则返回false。
$_SERVER 是服务器的超级全局变量数组。您还可以使用 $_SERVER['REMOTE_ADDR'] 来获取客户端的 IP 地址。两者的区别在于getenv不支持php在IIS的isapi模式下运行。
strcasecmp(string1, string2) string函数的用法是比较string1和string2,如果相等,返回0,如果string1大于string2,返回大于0的数,如果小于则返回一个数小于 0。
该函数首先使用客户端IP,如果没有建立尝试使用代理方法,如果没有,则使用REMOTE_ADDR。
我还看到了一种更详细的检测 IP 的方法,考虑到 IP 欺骗和多代理代码。方法类似。
function getip() {
$unknown = 'unknown';
if ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown) ) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif ( isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown) ) {
$ip = $_SERVER['REMOTE_ADDR'];
}
/*
处理多层代理的情况
或者使用正则方式:$ip = preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;
*/
if (false !== strpos($ip, ','))
$ip = reset(explode(',', $ip));
return $ip;
}
一、不使用代理服务器的PHP获取客户端IP情况:
REMOTE_ADDR= 客户端 IP