php抓取网页域名(获取客户端真正方法.使用php获取IP的方法能找到)

优采云 发布时间: 2022-04-19 22:10

  php抓取网页域名(获取客户端真正方法.使用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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线