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

本文介绍了一个PHP函数,用于解决同一域名对应多个IP时,依次访问每台服务器上的PHP接口程序并获取其传输状态的问题。通过在请求头部添加服务器的域名信息,实现在负载均衡环境下的远程网页内容获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   <?php
  echo file_get_contents("www.56dxw.com");
  ?>
  
  但是,在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访问www.56dxw.com了,因为它可能一直重复访问某一台服务器。
  
  而采用依次访问http://72.249.146.213/abc.phphttp://72.249.146.214/abc.phphttp://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.ph

p");
  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.?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值