|
@@ -278,10 +278,33 @@ class Service
|
|
// gethostbyname() 函数可能会受到 PHP 配置中的 allow_url_fopen 和 disable_functions 选项的限制
|
|
// gethostbyname() 函数可能会受到 PHP 配置中的 allow_url_fopen 和 disable_functions 选项的限制
|
|
function isDomainAvailable($domain) {
|
|
function isDomainAvailable($domain) {
|
|
$ip = gethostbyname($domain);
|
|
$ip = gethostbyname($domain);
|
|
-
|
|
|
|
|
|
+dd(filter_var($ip, FILTER_VALIDATE_IP) === false);
|
|
// 如果解析失败或者返回的 IP 地址与输入的域名相同,则说明域名无效
|
|
// 如果解析失败或者返回的 IP 地址与输入的域名相同,则说明域名无效
|
|
if ($ip === $domain || filter_var($ip, FILTER_VALIDATE_IP) === false) return false;
|
|
if ($ip === $domain || filter_var($ip, FILTER_VALIDATE_IP) === false) return false;
|
|
|
|
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ function isHostReachable($host, $port = 80, $timeout = 5) {
|
|
|
|
+ if (filter_var($host, FILTER_VALIDATE_IP) !== false) {
|
|
|
|
+ // 直接使用 IP 地址
|
|
|
|
+ $ip = $host;
|
|
|
|
+ } else {
|
|
|
|
+ // 获取主机名对应的 IP 地址
|
|
|
|
+ $ip = gethostbyname($host);
|
|
|
|
+ if ($ip === $host) {
|
|
|
|
+ // 如果 gethostbyname 返回原始主机名,则无法解析
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 尝试连接到服务器
|
|
|
|
+ $socket = @fsockopen($ip, $port, $errno, $errstr, $timeout);
|
|
|
|
+ if ($socket) {
|
|
|
|
+ fclose($socket);
|
|
|
|
+ return true; // 成功连接
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return false; // 连接失败
|
|
|
|
+ }
|
|
}
|
|
}
|