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

php中文网
发布: 2016-06-20 12:35:11
原创
1009人浏览过

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. 立即学习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.     }     

    奇域
    奇域

    奇域是一个专注于中式美学的国风AI绘画创作平台

    奇域 30
    查看详情 奇域
  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. ?>  


PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号