在Web开发中,获取域名相关信息,是一项必备的能力。而php天生地具有解析URI的能力,所以PHP获取域名也变得非常简单。在这里整理了一些,PHP获取域名的方法和技巧。
代码示例
一、PHP获取域名地址
$host = $_SERVER['HTTP_HOST'];
echo "当前域名为:" . $host;
上述代码中,$_SERVER['HTTP_HOST'] 是PHP内置的全局变量之一,表示当前页面的域名地址。通过输出该变量的值,我们就可以获取当前域名。
除了获取当前域名,有时候我们还需要获取URL中的其它信息,比如请求协议(HTTP/HTTPS)、端口号等。下面是一个获取当前URL的完整代码示例:
$url = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http";
$url .= "://" . $_SERVER['HTTP_HOST'];
$url .= $_SERVER['REQUEST_URI'];
echo "当前URL为:" . $url;
上述代码通过判断 $_SERVER['HTTPS'] 是否为 on 来获取当前协议,再通过 $_SERVER['HTTP_HOST'] 获取当前域名,最后通过 $_SERVER['REQUEST_URI'] 获取当前路径,最终拼接成完整的URL。
二、PHP获取文件名
获取当前页面的文件名也是常见的任务,下面是一个获取文件名的完整代码示例:
$filename = basename($_SERVER['PHP_SELF']);
echo "当前文件名为:" . $filename;
上述代码中,basename() 函数返回路径中的最后一个部分,即文件名。
三、PHP获取域名IP
获取当前域名对应的IP地址也是常见的任务,下面是一个获取IP地址的完整代码示例:
$ip = gethostbyname($_SERVER['HTTP_HOST']);
echo "当前域名的IP地址为:" . $ip;
上述代码中,gethostbyname() 函数根据域名获取对应的IP地址。
四、PHP获取域名前缀
获取当前域名的前缀(即 www、blog、shop 等)也是常见的任务,下面是一个获取前缀的完整代码示例:
$prefix = explode('.', $_SERVER['HTTP_HOST'])[0];
echo "当前域名的前缀为:" . $prefix;
上述代码中,explode() 函数通过 . 将域名拆分成数组,然后取下标为 0 的值,即可获取域名的前缀。
五、PHP获取字段名
在一些特殊场景中,可能需要获取当前URL中某个字段的值,下面是一个获取指定字段的完整代码示例:
$field_name = 'id';
parse_str($_SERVER['QUERY_STRING'], $query_vars);
echo "当前URL中字段 $field_name 的值为:" . $query_vars[$field_name];
上述代码通过 parse_str() 函数将当前URL中的查询参数解析成一个数组,然后取指定字段的值即可。
六、PHP获取域名实例
在一些情况下,可能需要获取一个完整的、包含协议和域名的URL,下面是一个获取实例的完整代码示例:
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") ."://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
echo "当前域名实例为:" . $url;
上述代码中,将获取域名地址和获取URL的代码组合起来,即可获取完整的域名实例。
七、PHP获取域名的状态
有时候我们需要判断一个域名的状态是否可用,下面是一个获取域名状态的完整代码示例:
$url = 'http://www.example.***';
$headers = @get_headers($url);
if ($headers) {
$status_code = substr($headers[0], 9, 3);
echo "当前域名状态为:" . $status_code;
} else {
echo "当前域名不可用";
}
上述代码通过 get_headers() 函数获取指定域名的响应头信息,从而获得当前域名的状态码。状态码是 HTTP 协议定义的一种标准,用于描述当前请求的处理结果。例如,200 表示成功,404 表示找不到页面,500 表示服务器错误等。通过判断状态码,我们就可以大致了解当前域名的状态。
八、PHP获取域名解析
在一些场景下,我们需要获取一个域名所有的解析记录,下面是一个获取域名解析的完整代码示例:
$domain = 'www.example.***';
$records = dns_get_record($domain, DNS_ALL);
echo "当前域名的解析记录为:";
foreach ($records as $record) {
echo "{$record['host']} {$record['class']} {$record['type']} {$record['target']}";
}
上述代码通过 dns_get_record() 函数获取指定域名的所有解析记录,然后遍历输出即可。
九、PHP获取域名whois
whois(who is)是一种查询域名信息的协议,我们可以通过 whois 查询某个域名的注册信息、过期时间等。下面是一个获取域名whois的完整代码示例:
$domain = 'example.***';
$whois_server = 'whois.crsnic.***';
$query_string = $domain."\r\n";
$fp = fsockopen($whois_server, 43);
if ($fp) {
fputs($fp, $query_string);
$response = '';
while (!feof($fp)) {
$response .= fgets($fp, 1024);
}
fclose($fp);
echo "当前域名的whois信息为:".nl2br(htmlspecialchars($response));
} else {
echo "连接whois服务器失败";
}
上述代码中,首先定义了一个 whois 服务器地址,然后通过 fsockopen() 函数连接到该服务器,并发送查询指令。最后,将服务器返回的信息输出即可。
十、PHP获取域名解析记录
如果我们只需要获取某个域名特定类型的解析记录,可以使用 DNS 类库,下面是一个获取A记录的完整代码示例:
$domain = 'www.example.***';
$dns = dns_get_record($domain, DNS_A);
echo "当前域名的A记录为:";
foreach ($dns as $record) {
echo "{$record['host']} {$record['class']} {$record['type']} {$record['ip']}";
}
上述代码通过 DNS 类库指定要获取的记录类型(例如 A 记录)并获取所有对应的解析记录,然后遍历输出即可。
结语
现在不同的框架,都有自己不同的简便方式,框架中,一般都会将你可能用到的,封装成函数,大家多找一找,会给你带来太多方便的。以上就是本文详解 PHP 获取域名的各种方法和技巧,希望能对你的工作有所帮助。