PHP获取远程网页内容有多种方式,例如用自带的file_get_contents、fopen等函数。
引用
<?php   
echo file_get_contents("https://blog.junphp.com/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),查询这台服务器的传输状态。

  通过设置本地hosts也不行,因为hosts不能设置多个IP对应同一个域名。

  那就只有通过PHP和HTTP协议来实现:访问abc.php时,在header头中加上blog.zyan.cc域名。于是,我写了下面这个PHP函数:
  1. <?php  
  2. /************************ 
  3. * 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容 
  4. * 创建时间:2008-12-09 
  5. * 参数说明: 
  6. *    $ip   服务器的IP地址 
  7. *    $host   服务器的host名称 
  8. *    $url   服务器的URL地址(不含域名) 
  9. * 返回值: 
  10. *    获取到的远程网页内容 
  11. *    false   访问远程网页失败 
  12. ************************/  
  13. function HttpVisit($ip$host$url)     
  14. {     
  15.     $errstr = '';     
  16.     $errno = '';  
  17.     $fp = fsockopen ($ip, 80, $errno$errstr, 90);  
  18.     if (!$fp)     
  19.     {     
  20.          return false;     
  21.     }     
  22.     else    
  23.     {     
  24.         $out = "GET {$url} HTTP/1.1\r\n";  
  25.         $out .= "Host:{$host}\r\n";     
  26.         $out .= "Connection: close\r\n\r\n";  
  27.         fputs ($fp$out);     
  28.   
  29.         while($line = fread($fp, 4096)){  
  30.            $response .= $line;  
  31.         }  
  32.         fclose( $fp );  
  33.   
  34.         //去掉Header头信息  
  35.         $pos = strpos($response"\r\n\r\n");  
  36.         $response = substr($response$pos + 4);  
  37.       
  38.         return $response;     
  39.     }     
  40. }  
  41.   
  42. //调用方法:  
  43. $server_info1 = HttpVisit("72.249.146.213""blog.junphp.com""/abc.php");  
  44. $server_info2 = HttpVisit("72.249.146.214""blog.junphp.com""/abc.php");  
  45. $server_info3 = HttpVisit("72.249.146.215""blog.junphp.com""/abc.php");  
  46. ?>  
相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!