Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP fsockopen不工作_Php_Fsockopen_Parse Url - Fatal编程技术网

PHP fsockopen不工作

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

因此,我试图开发一个函数,使用fsockopen检查实际URL是否存在。我想这样做是为了验证用户输入的URL,但同时,我不想因为该站点使用的是预定义的404站点或类似的东西而出错。这就是为什么我不使用文件获取内容。这是我的代码:

<?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