Home  >  Article  >  Backend Development  >  同一域名对应多个IP时,PHP获取远程网页内容的函数

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

WBOY
WBOYOriginal
2016-06-20 12:35:11754browse

PHP获取远程网页内容有多种方式,例如用自带的file_get_contents、fopen等函数。

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函数:

Java代码  

  1. /************************ 

  2. * 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容 

  3. * 创建时间:2008-12-09 

  4. * 创建人:张宴(blog.s135.com) 

  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.s135.com", "/abc.php");  

  44. $server_info2 = HttpVisit("72.249.146.214", "blog.s135.com", "/abc.php");  

  45. $server_info3 = HttpVisit("72.249.146.215", "blog.s135.com", "/abc.php");  

  46. ?>  


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:php与MysqlNext article:explode 的技巧