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

本文涉及的产品
.cn 域名,1个 12个月
简介:

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.php 、http://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函数:

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.     }     
  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. ?>  
相关文章
|
23天前
|
域名解析 缓存 负载均衡
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?
|
2月前
|
Linux 网络架构
通过route , tracert , traceroute 查看本地路由配置及访问ip或域名时经过的路由信息
通过route , tracert , traceroute 查看本地路由配置及访问ip或域名时经过的路由信息
103 2
|
2月前
|
存储 运维 Serverless
函数计算产品使用问题之如何使用自定义域名访问函数
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3月前
|
PHP
php 获取带http或https的域名
php 获取带http或https的域名
139 4
|
3月前
|
弹性计算 网络协议 Serverless
Serverless 应用引擎操作报错合集之使用ecs,反代到函数的内网域名上,提示{"ErrorCode":"DomainNameNotFound",是什么原因
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
运维 监控 Serverless
Serverless 应用引擎产品使用合集之函数没有绑定自定义域名,如何在公网访问该函数
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
3月前
|
存储 运维 Serverless
Serverless 应用引擎产品使用合集之为SD函数配置域名并添加路径/sd后无法正常访问,如何配置自定义域名
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
2月前
|
Web App开发
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
|
3月前
网络编程中的互联网协议 , IP地址 , 域名 , 端口 , 架构 , 网页数据请求 , 响应码
网络编程中的互联网协议 , IP地址 , 域名 , 端口 , 架构 , 网页数据请求 , 响应码
|
3月前
|
JavaScript Serverless Go
函数计算产品使用问题之如何获取HTTP函数的域名地址
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。