同一域名对应多个IP时,PHP获取远程网页内容的函数 [文章作者:张宴 本文版本:v1.0 最后修改:2008.12.15 转载请注明原文链接:http://blog.zyan.cc/post/389/]PHP获取远程网页内容有多种方式,例如用自带的file_get_contents、fopen等函数。
引用
<?php
echo file_get_contents("http://blog.zyan.cc/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),查询这台服务器的传输状态。这时就不能直接用file_get_contents访问http://blog.zyan.cc/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.zyan.cc域名。于是,我写了下面这个PHP函数:
view plainprint?
<?php
/************************
* 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容
* 创建时间:2008-12-09
* 创建人:张宴(blog.zyan.cc)
* 参数说明:
*    $ip   服务器的IP地址
*    $host   服务器的host名称
*    $url   服务器的URL地址(不含域名)
* 返回值:
*    获取到的远程网页内容
*    false   访问远程网页失败
************************/
function HttpVisit($ip, $host, $url)
{     $errstr = '';     $errno = '';  $fp = fsockopen ($ip, 80, $errno, $errstr, 90);  if (!$fp)     {     return false;     }     else    {     $out = "GET {$url} HTTP/1.1\r\n";  $out .= "Host:{$host}\r\n";     $out .= "Connection: close\r\n\r\n";  fputs ($fp, $out);     while($line = fread($fp, 4096)){  $response .= $line;  }  fclose( $fp );  //去掉Header头信息  $pos = strpos($response, "\r\n\r\n");  $response = substr($response, $pos + 4);  return $response;     }
}  //调用方法:
$server_info1 = HttpVisit("72.249.146.213", "blog.zyan.cc", "/abc.php");
$server_info2 = HttpVisit("72.249.146.214", "blog.zyan.cc", "/abc.php");
$server_info3 = HttpVisit("72.249.146.215", "blog.zyan.cc", "/abc.php");
?>

  

转载于:https://www.cnblogs.com/L-H-R-X-hehe/p/3970622.html

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

  1. 多活主备选择性DNS解析(一个域名对应多个IP)

    多活主备选择性DNS 问题背景 知识背景 DNS解析存在多级缓存(此处仅列举到DNS服务器层:后续流程不涉及) DNS一对多域名的解析随机性 DNS 域名解析负载均衡缺点: 可能方案 方案一.dns解 ...

  2. java将域名解析为IP地址,获取网卡的配置信息

    DNS域名解析系统 系统简介:用户通过输入需要查询的域名,便可输出域名对应的一个IP地址或多个IP地址. 系统功能:1.通过输入域名可以查询域名所对应的IP地址. 2.可以获取当地的主机IP地址和本地 ...

  3. 实现一个域名对应多个IP地址和DNS优缺点详解!

    实现一个域名对应多个IP地址和DNS优缺点详解! 1.DNS定义: DNS(Domain Name System)是因特网的一项服务,它作为域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访 ...

  4. 虚拟Web主机(基于域名配置,基于ip地址,基于端口)

    文章目录 虚拟Web主机 httpd支持的虚拟主机类型 基于域名的虚拟主机 基于IP地址的虚拟主机 基于端口的蓄力主机 基于域名的虚拟主机 修改DNS主配置文件 设置区域配置文件 添加区域数据配置文件 ...

  5. linux怎样ping域名看不到ip,在linux下,ping域名ping不了,ping ip却可以解决办法

    ping域名: [root@zyy ~]# ping www.baidu.com ping: unknown host www.baidu.com ping ip时: [root@zyy ~]# pi ...

  6. 服务器怎么解绑网站域名,服务器解绑ip

    服务器解绑ip 内容精选 换一换 通过将弹性公网IP与弹性网卡绑定,您可以构建更灵活,扩展性更强的IT解决方案.弹性网卡本身提供一个私网IP,与弹性公网IP绑定后,相当于同时具备了私网IP和公网IP. ...

  7. Centos7.6下构建虚拟主机实验(基于域名、端口及IP地址)

    文章目录 一.构建虚拟主机概述 二.实验环境及详细步骤 2.1 基于域名 2.2 基于端口 2.3 基于IP 一.构建虚拟主机概述 虚拟Web主机 在同一台服务器中运行多个Web站点,其中每一个站点并 ...

  8. 计算机名和DNS域名的关系,域名、DNS、IP地址的对应关系

    什么是域名?什么是IP地址? 域名(英语:Domain Name),简称域名.网域,是由一串用点分隔的名字组成的上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置) ...

  9. 虚拟主机的构建——基于域名、端口、IP

    构建虚拟主机 1.虚拟主机介绍 企业常用的虚拟主机分为3种: (1)基于域名 (2)基于端口 (3)基于IP 虚拟web主机 在同一台物理服务器中运行多个web站点,其中每一个站点并不独立占用一台真正 ...

最新文章

  1. js 变量提升 和函数提升
  2. 1079 Total Sales of Supply Chain
  3. Python 数据结构_队列
  4. 很好的linux启动说明( bootsect.S、setup.S、head.S)
  5. Post Content_Length exceeds the limit
  6. knowladge_网站开发_jQuery插件_Clock Demo
  7. 【图像处理】——opencv常用函数
  8. 中国股市暴涨暴跌全记录
  9. django 1.8 官方文档翻译: 8-3 点击劫持保护
  10. 从源码安装mysql_从源代码安装mysql
  11. 洛谷P1461 海明码 Hamming Codes
  12. 2021年“泰迪杯”数据分析技能赛A题任务1:数据分析与预测
  13. 浏览器快捷键大全、常用快捷键整理
  14. 笔记本电脑插网线显示未识别的网络_笔记本插入网线,显示未识别网络
  15. GBA火焰纹章改版-智慧的结晶
  16. 用友ERP-NC用户常见的问题
  17. html同时播放多个文件夹,怎么把很多文件一起同时放入一个文件夹内
  18. Java 后端开发实践 - 项目模板(16 步)
  19. kubectl使用参数--kubeconfig指定不同 .kube/config 文件访问以不同集群
  20. Win10启动 蓝屏 0xc000021a解决方法(不重装系统)

热门文章

  1. 《开发者突击:精通ASP.NET AJAX网络程序设计》终于面世
  2. 单片机加减法计算器_单片机简易加法计算器程序
  3. SDP 软件定义边界
  4. 有关 strongSwan 的英文文档
  5. Adobe AIR教程:ANE面向IAP的测试和开发
  6. addEventListener事件监听传递参数
  7. C#使用双堆栈创建队列
  8. distcp用于集群中数据传输解读
  9. Python的算数运算符
  10. uniapp不同页面跳转传递数据