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


    文章作者:张宴 本文版本: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. ?>  




  • 相关阅读:
    makefile学习之路
    DiagramDesigner的学习心得一
    MvvmLight的Message使用
    MvvmLight学习心得三
    Nancy学习心得一
    WPF的类似WinForm中的托盘
    py学习记录#10
    PY期末习题全解析
    py学习记录#11
    PY学习记录#9
  • 原文地址:https://www.cnblogs.com/firmy/p/2305626.html
Copyright © 2020-2023  润新知