同一域名对应多个IP时,PHP获取远程网页内容的函数[原创]

74 篇文章 0 订阅

 [文章作者:张宴 本文版本:v1.0 最后修改:2008.12.15 转载请注明原文链接:http://blog.s135.com/post/389/]

  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.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.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. ?>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值