1
abelyao 2015-03-29 14:38:33 +08:00 via iPhone
我开始怀疑楼主是来宣传网站的了…
上个帖子也一样的套路… |
3
kn007 OP @abelyao 因为昨天下午开始整理网站,所以发现了很多问题。我实在不知道这个要怎么弄了。
刚去ipip.net试了,貌似情况一样。试图google,没发现有用的。 |
4
msg7086 2015-03-29 16:11:58 +08:00 1
不能。数字本来就是合法的IP地址。
|
5
abelyao 2015-03-29 16:12:17 +08:00
@kn007 你举例的那几个,除了最后一个我不理解是为啥之外,其它都很好理解吧,本身就是 IP 地址的一些缩写方式,如果你一定要让纯数字范围 false 的话,可以实现判断一下,用正则或者 is_numeric 之类的函数都行。
另外可以多看看这一页的许多例子 http://php.net/manual/zh/function.gethostbyname.php |
7
kn007 OP @abelyao 最后一个?
is_numeric的话,除了1、1.2,1.2.3或1.2.3.4都是false。 正则的话,匹配非合法ipv4,自然要gethostbyname,gethostbyname后,不合法的又变为合法了。 因为输入进来可能是域名也可能是ip, 判断非ip就gethostbyname,是ip直接查数据库。 问题非ip经过gethostbyname可能就被合法了。 |
8
kn007 OP @abelyao 你说的正则的法子,我是真的想了。。
真不知道怎么破。 比如ipip.net他们的框不能输入http://www.ipip.net/,无法查询,我的可以,这些都是自己写的。 现在第一步,就是格式化输入str。 第二步,判断非ip,进行gethostbyname,是ip查数据库。 现在就是卡在gethostbyname,会对数字进行格式化(long2ip)。 13.1在经过第二步,已经变成13.0.0.1了。合法了。 如果单纯十进制还好,就以is_numeric判断。 |
9
kn007 OP 我刚想了下,只能用个笨办法。
就是第一步,就是格式化输入str。 第二步,判断,是ip查数据库,不是继续下一步。 第三步,explore('.',$str)进行count()<4然后foreach判断is_numeric,如果都过就返回false,不过就gethostbyname。或正则匹配match_all,如果小于4个,就返回false,否则gethostbyname。 我去试试先 |
10
msg7086 2015-03-29 16:51:04 +08:00
如果可以的话,建议你重新提一下问题。
你主贴里说怎么判断是数字,那么上面说了is_numeric()。 能不能说清楚你到底要判断什么? |
11
iyaozhen 2015-03-29 16:56:15 +08:00
不知道楼主要干啥。本身就是正确的呀。
硬是要判断的话判断下有没有点(.)。 |
14
kn007 OP @abelyao
现在以 $ip=is_ip($ip_)?$ip : gethostbyname(pre_gethostbyname($ip_)); function pre_gethostbyname($str) { if(preg_match("/^(?:[0-9]{1,3}\.){0,2}[0-9]{1,3}$/", $str)) { return false; } return $str; } 可以解决。但又有个奇怪的问题。。。 输入 a0,abc 居然也能查询。。。我服了 <?php var_dump(gethostbyname('a0')); var_dump(gethostbyname('abc')); ?> string(13) "81.218.249.12" string(15) "162.243.117.188" @msg7086 莫非字母也能变成ip。。。26个字母都可以查。。。。 |
15
kn007 OP 已去问鸟哥了。。。感觉不科学。
|
16
msg7086 2015-03-29 21:29:55 +08:00 via iPhone
主机名不带点很正常啊…
|