首页 运维 网络学院 查看内容

DNS轮询 PHP获取远程网页内容的函数

2009-7-28 09:53 608 0

摘要:   PHP获取远程网页内容有多种方式,例如用自带的file_get_contents、fopen等函数。    <?php  echo file_get_contents("http://blo...
关键词: 服务器 PHP 72.249 http abc 多个 域名 blog 如用 均衡

  PHP获取远程网页内容有多种方式,例如用自带的file_get_contents、fopen等函数。    <?php  echo file_get_contents("http://blog.s135.com/abc.php");  ?>    但是,在DNS轮询等负载均衡中,同一域名,可能对应多台服务器,多个IP。假设blog.s135.com被DNS解析到72.249.146.213、72.249.146.214、72.249.146.215三个IP,用户每次访问blog.s135.com,系统会根据负载均衡的相应算法访问其中的一台服务器。    上周做一个视频项目时,就碰到这样一类需求:需要依次访问每台服务器上的一个PHP接口程序(假设为abc.php),查询这台服务器的传输状态。    这时就不能直接用file_get_contents访问http://blog.s135.com/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.s135.com域名。于是,我写了下面这个PHP函数:  1.<?php  2./************************  3.* 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容  4.* 创建时间:2008-12-09  5.* 创建人:张宴(blog.s135.com)  6.* 参数说明:  7.*    $ip   服务器的IP地址  8.*    $host   服务器的host名称  9.*    $url   服务器的URL地址(不含域名)  10.* 返回值:  11.*    获取到的远程网页内容  12.*    false   访问远程网页失败  13.************************/  14.function HttpVisit($ip, $host, $url)  15.{  16.    $errstr = '';  17.    $errno = '';  18.    $fp = fsockopen ($ip, 80, $errno, $errstr, 90);  19.    if (!$fp)  20.    {  21.         return false;  22.    }  23.    else  24.    {  25.        $out = "GET {$url} HTTP/1.1\r\n";  26.        $out .= "Host:{$host}\r\n";  27.        $out .= "Connection: close\r\n\r\n";  28.        fputs ($fp, $out);  29.  30.        while($line = fread($fp, 4096)){  31.           $response .= $line;  32.        }  33.        fclose( $fp );  34.  35.        //去掉Header头信息  36.        $pos = strpos($response, "\r\n\r\n");  37.        $response = substr($response, $pos + 4);  38.  39.        return $response;  40.    }  41.}  42.  43.//调用方法:  44.$server_info1 = HttpVisit("72.249.146.213", "blog.s135.com", "/abc.php");  45.$server_info2 = HttpVisit("72.249.146.214", "blog.s135.com", "/abc.php");  46.$server_info3 = HttpVisit("72.249.146.215", "blog.s135.com", "/abc.php");  47.?>
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部