开发者社区> 问答> 正文

如何在php中截取字符串“xxx_xxxx_IP地址_xxxxxxxx_xxxxxx”中的IP地址呢?

在PHP中,一个字符串比如“xxx_xxxx_10.136.132.61_xxxxxxxx_xxxxxx”,怎么得到其中的“10.136.132.61”这一部分呢。

因为IP地址长短不一,所以我一开始想的substr是不适用的。如果寻找“_”的位置的话,因为IP前后都有两个“_”,所以也不行。

除了IP地址长度不确定,其他的长度是确定的,格式也是确定的,都是“xxx_xxxx_IP地址_xxxxxxxx_xxxxxx”这个格式,x表示一个字符

展开
收起
星球华人 2016-04-09 16:04:01 3091 0
1 条回答
写回答
取消 提交回答
  • 您好,.X.XXX.XXX系列IP,而这个函数获取的是局域网网关出口的IP地址,如果访问者使用代理服务器,将不获取代理服务器的IP,而是获取访问者网关的真实IP。如果将这个函数应用到限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地址。

    答案来源于网络

    2019-09-25 21:02:55
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载