PHP fsockopen不工作
因此,我试图开发一个函数,使用fsockopen检查实际URL是否存在。我想这样做是为了验证用户输入的URL,但同时,我不想因为该站点使用的是预定义的404站点或类似的东西而出错。这就是为什么我不使用文件获取内容。这是我的代码:PHP fsockopen不工作,php,fsockopen,parse-url,Php,Fsockopen,Parse Url,因此,我试图开发一个函数,使用fsockopen检查实际URL是否存在。我想这样做是为了验证用户输入的URL,但同时,我不想因为该站点使用的是预定义的404站点或类似的东西而出错。这就是为什么我不使用文件获取内容。这是我的代码: <?php function url_validate($link) { $url_parts = parse_url($link); if(empty($url_parts["host"])) return(false); if(!empty($u
<?php
function url_validate($link)
{
$url_parts = parse_url($link);
if(empty($url_parts["host"])) return(false);
if(!empty($url_parts["path"])) {
$documentpath = $url_parts["path"];
}else{
$documentpath = "/";
}
if(!empty($url_parts["query"])) {
$documentpath .= "?" . $url_parts["query"];
}
$host = $url_parts["host"];
$port = $url_parts["port"];
// Now (HTTP-)GET $documentpath at $host";
if(empty($port)) $port = "80";
$socket = fsockopen($host, $port, $errno, $errstr, 30);
if(!$socket) {
return(false);
}else{
fwrite($socket, "HEAD ".$documentpath." HTTP/1.0\r\nHost: $host\r\n\r\n");
$http_response = fgets($socket, 22);
if(preg_match("/200 OK/i", $http_response, $regs)) {
return(true);
fclose($socket);
}else{
// echo "HTTP-Response: $http_response<br>";
return(false);
}
}
}
echo url_validate("http://google.com");
?>
你们中有人知道可能出了什么问题吗?您的服务器无法解析主机。这是有史以来最常见的问题之一,也是您不想创建这样一个脚本的原因之一。你会得到大量的假阴性。TL;博士-你的脚本,如果它是100%完成,将永远不会是防弹的。只需验证URI,无需获取数据。使用cURL和
CURLOPT_NOBODY
设置(这使它执行HEAD
请求而不是GET
)可能会更容易,在这种情况下,您仍然无法解决客户端(运行脚本的服务器)无法解析主机名的问题。此外,您查询的远程web服务器必须支持HEAD请求,我们知道情况并非总是如此,这使得它更容易出现故障。
Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/vhosts/username to domain/httpdocs/test.php on line 22 Warning: fsockopen(): unable to connect to google.com:80 (php_network_getaddresses: getaddrinfo failed: Name or service not known) in /var/www/vhosts/username to domain/httpdocs/test.php on line 22