zoukankan      html  css  js  c++  java
  • 同一域名对应多个IP时,PHP获取远程网页内容的函数

     同一域名对应多个IP时,PHP获取远程网页内容的函数 
      [文章作者:张宴 本文版本:v1.0 最后修改:2008.12.15 转载请注明原文链接:http://blog.zyan.cc/post/389/]
    
      PHP获取远程网页内容有多种方式,例如用自带的file_get_contents、fopen等函数。
    引用
    <?php   
    echo file_get_contents("http://blog.zyan.cc/abc.php");   
    ?>
    
      但是,在DNS轮询等负载均衡中,同一域名,可能对应多台服务器,多个IP。假设blog.zyan.cc被DNS解析到72.249.146.213、72.249.146.214、72.249.146.215三个IP,用户每次访问blog.zyan.cc,系统会根据负载均衡的相应算法访问其中的一台服务器。
    
      上周做一个视频项目时,就碰到这样一类需求:需要依次访问每台服务器上的一个PHP接口程序(假设为abc.php),查询这台服务器的传输状态。
    
      这时就不能直接用file_get_contents访问http://blog.zyan.cc/abc.php了,因为它可能一直重复访问某一台服务器。
    
      而采用依次访问http://72.249.146.213/abc.php、http://72.249.146.214/abc.php、http://72.249.146.215/abc.php的方法,在这三台服务器上的Web Server配有多个虚拟主机时,也是不行的。
    
      通过设置本地hosts也不行,因为hosts不能设置多个IP对应同一个域名。
    
      那就只有通过PHP和HTTP协议来实现:访问abc.php时,在header头中加上blog.zyan.cc域名。于是,我写了下面这个PHP函数:
    view plainprint?
    <?php  
    /************************ 
    * 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容 
    * 创建时间:2008-12-09 
    * 创建人:张宴(blog.zyan.cc) 
    * 参数说明: 
    *    $ip   服务器的IP地址 
    *    $host   服务器的host名称 
    *    $url   服务器的URL地址(不含域名) 
    * 返回值: 
    *    获取到的远程网页内容 
    *    false   访问远程网页失败 
    ************************/  
    function HttpVisit($ip, $host, $url)     
    {     
        $errstr = '';     
        $errno = '';  
        $fp = fsockopen ($ip, 80, $errno, $errstr, 90);  
        if (!$fp)     
        {     
             return false;     
        }     
        else    
        {     
            $out = "GET {$url} HTTP/1.1
    ";  
            $out .= "Host:{$host}
    ";     
            $out .= "Connection: close
    
    ";  
            fputs ($fp, $out);     
      
            while($line = fread($fp, 4096)){  
               $response .= $line;  
            }  
            fclose( $fp );  
      
            //去掉Header头信息  
            $pos = strpos($response, "
    
    ");  
            $response = substr($response, $pos + 4);  
          
            return $response;     
        }     
    }  
      
    //调用方法:  
    $server_info1 = HttpVisit("72.249.146.213", "blog.zyan.cc", "/abc.php");  
    $server_info2 = HttpVisit("72.249.146.214", "blog.zyan.cc", "/abc.php");  
    $server_info3 = HttpVisit("72.249.146.215", "blog.zyan.cc", "/abc.php");  
    ?>  
    

      

  • 相关阅读:
    2019.8.16
    一种抠环的办法
    [HAOI2015]树上染色
    有关树形背包
    2019.7.27
    有关矩阵快速幂
    2019.7.25
    欧拉函数(转载)
    2019.7.22
    phpstudy集成环境安装redis扩展
  • 原文地址:https://www.cnblogs.com/L-H-R-X-hehe/p/3970622.html
Copyright © 2011-2022 走看看