PHP,如果IP或域检测功能

时间:2012-10-20 09:36:20

标签: php

有没有办法使用php检测字符串是否是Ip或域,例如下面。

$string = "http://192.168.0.0";
$string = "http://example.com";

因此,如果字符串是IP,那么如果脚本/函数将其检测为域,它将执行某些操作,它将执行其他操作。

谢谢

4 个答案:

答案 0 :(得分:8)

您可以像这样测试它:

$isIP = (bool)ip2long($_SERVER['HTTP_HOST']);

函数ip2long将返回false,主机不是域名等有效的IP地址。使用ip2long函数的好处是它还验证了提供的IP地址。所以例如地址是4.4.4.756会给你假。

所以要测试给定的字符串,你可以这样做:

$string = "http://192.168.0.0";
$parts = parse_url($string);
$isIP = (bool)ip2long($parts['host']);

答案 1 :(得分:1)

您可以使用正则表达式。

在这里你可以找到例子:

Regular expression to match DNS hostname or IP Address?

代码/正则表达式模式:

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";

ValidHostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";

如何在php中使用正则表达式:

preg-match manual at php.net

答案 2 :(得分:1)

您也可以比较HTTP_HOST和SERVER_ADDR。 对于IP v6,您还应修剪HTTP_HOST上的方括号。

$isIP = @($_SERVER['SERVER_ADDR'] === trim($_SERVER['HTTP_HOST'], '[]'));

似乎比正则表达式更有效,但不确定ip2long aproach是否会更有效。

答案 3 :(得分:0)

您在SO问题上有正则表达式:Regular expression to match DNS hostname or IP Address?

您将需要使用PHP函数:preg_match

相关问题