`
hudeyong926
  • 浏览: 2028410 次
  • 来自: 武汉
社区版块
存档分类
最新评论

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

阅读更多

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

<?php
/************************
* 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容
* 创建时间:2008-12-09
* 创建人:张宴(blog.s135.com)
* 参数说明:
*    $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.s135.com", "/abc.php");
$server_info2 = HttpVisit("72.249.146.214", "blog.s135.com", "/abc.php");
$server_info3 = HttpVisit("72.249.146.215", "blog.s135.com", "/abc.php");
?>
分享到:
评论

相关推荐

    判断两个ip号是否在同一网段

    以下是一个简单的C#函数示例,用于判断两个IP地址是否在同一网段: ```csharp using System.Net; public bool IsSameSubnet(IPAddress ip1, IPAddress ip2, IPAddress subnetMask) { byte[] ip1Bytes = ip1....

    Python实现通过解析域名获取ip地址的方法分析

    在某些情况下,一个域名可能会对应多个 IP 地址,此时我们需要获取所有解析出来的 IP 地址。 **示例代码**: ```python import socket def get_ip_list(domain): ip_list = [] try: addrs = socket.get...

    PHP 获取远程网页内容的代码(fopen,curl已测)

    fopen()函数原本用于打开文件,但当指定的文件路径是一个URL时,PHP会尝试以HTTP协议打开这个URL,从而获取远程网页内容。这使得开发者可以利用简单的文件操作函数来处理远程内容。例如,下面的代码展示了如何使用...

    ip地址查询可查域名ip php源码

    标题中的“ip地址查询可查域名ip php源码”指的是一个使用PHP编程语言编写的程序,它可以查询IP地址并解析对应的域名。这个程序允许开发者进行二次开发,以便根据实际需求进行定制,比如添加新的功能或者优化性能。...

    搜索同一WIFI局域网中的IP

    本篇文章将深入探讨如何在同一个WiFi局域网中搜索并获取其他设备的IP地址。这在实现设备间通信、智能家居系统或者多设备协作应用中具有重要的作用。我们将会分析给定的资源——"WifiLocalNetTest",它是一个Android...

    pb获取ip地址/mac地址

    使用此类DLL时,需要在PowerBuilder中创建一个外部函数引用,然后调用相应的函数来获取所需信息。 5. **app.pbl**: 这是一个PowerBuilder的库文件,可能包含了获取IP和MAC地址的相关代码和对象。在PowerBuilder中...

    基于PHP的网站外链及IP查询工具php版.zip

    PHP可以使用cURL库或file_get_contents函数发起HTTP请求,获取远程IP的响应。然后,可以利用第三方API(如MaxMind或IPInfoDB)来解析IP地址,获取国家、城市、经纬度等详细信息。 4. **PHP网络编程**:这个工具可能...

    通过matlab读取同一路径下多个txt或者mat文件

    在MATLAB中,读取同一路径下的多个TXT或MAT文件是一项常见的任务,特别是在数据分析和处理项目中。MATLAB提供了一系列的内置函数,使得这个过程变得简单而高效。下面将详细介绍如何利用MATLAB来完成这个任务。 首先...

    Qt5网络编程之获取本机IP地址和主机名

    2、类QHostInfo的fromName()函数,以主机名为参数作为输入,来获取主机的信息,然后利用address()函数,获取本机所有的IP地址,下面的代码通过if(address.protocol()==QAbstractSocket::IPv4Protocol)判断,仅仅输出...

    基于PHP的同IP站点查询代码源码.zip

    2. **DNS查询**:使用`gethostbyaddr()`函数,根据IP地址获取对应的域名。这一步是关键,因为它能帮助我们找出与IP相关的所有网站。 3. **HTTP请求**:可能需要发送HTTP HEAD请求或者GET请求到目标站点,检查返回的...

    PHP实例开发源码-同IP站点查询代码.zip

    在本压缩包“PHP实例开发源码-同IP站点查询代码.zip”中,包含了一个用于查询同一IP地址下运行的多个网站的PHP源代码。这个功能对于网络管理员、SEO优化人员或者安全研究人员来说非常有用,因为了解哪些站点共享同一...

    PHP实例开发源码——同IP站点查询代码.zip

    PHP中的`gethostbyaddr()`函数可以用于根据IP地址获取对应的主机名,而`gethostbyname()`函数则相反,将域名转换为IP。通过这些函数,我们可以找出哪些域名与特定IP相关联。 2. **HTTP请求**:可能使用了PHP的`file...

    限定同一用户名同一时间登录个数的解决方案收藏

    3. 在`LoginSum`函数中,查询`Login`表中对应用户ID的记录数。如果记录数小于`User_LoginSum`,则可以创建新的登录记录,更新`Login_RefreshTime`为当前时间,并设置一个公共变量`LoginTrue`为`True`,表示登录成功...

    判断两个IP是否属于同一个子网(java)

    判断两个IP是否属于同一个子网(java) 简单代码

    GeoIP地址库,用于查找对应IP地址对应的国家,城市

    例如,`GeoIP_city_by_ip()`函数用于获取指定IP地址的城市信息。 3. `GeoIPCity.dat索引文件`:为了提高查询效率,GeoIP数据库通常会有一个索引文件,它帮助快速定位到目标IP地址的记录。 4. `示例程序`:可能包含...

    获取远程主机mac地址的新方法

    传统的获取远程主机MAC地址的方法主要是通过ARP协议的SendARP函数,然而这种方法存在明显的局限性,即只能获取同一网段内主机的MAC地址,对于跨网段的远程主机则无能为力。这主要是因为ARP协议的设计初衷是为了解决...

    基于PHP的同IP站点查询代码.zip

    "基于PHP的同IP站点查询代码"是一个项目,它允许开发者通过PHP来实现对同一IP地址下托管的多个网站的查询功能。这种功能对于网络管理员、SEO专家或任何需要分析网络资源分布的人士都非常有用。通过这样的代码,用户...

    mysql实现合并同一ID对应多条数据的方法

    在MySQL中,有时我们需要处理的情况是,当一个标识符(如`ID`)对应着多条数据时,我们可能希望将这些数据合并成一条记录,以便于数据分析或展示。这通常发生在需要聚合数据或者合并重复信息的情景下。在本例中,...

    PB11.5获取IP地址及主机名

    在获取远程主机的IP地址和主机名时,可能需要建立实际的网络连接或者使用DNS查询。 总的来说,PB11.5提供了丰富的功能来处理网络通信,包括获取IP地址和主机名。通过合理利用系统API和Socket对象,开发者可以构建...

    获取局域网所有IP地址

    如果需要获取域名对应的IP,可以使用这两个函数。 5. **`IcmpSendEcho()`** 或 **`ping.exe`**:为了确保IP地址是活动的,可以使用ICMP协议(Internet Control Message Protocol)发送ping请求。`IcmpSendEcho()`...

Global site tag (gtag.js) - Google Analytics