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

 同一域名对应多个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");
?>

  

时间: 2024-10-27 12:22:10

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

函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容

<?php /************************ * 函数用途:同一域名对应多个IP时,获取指定服务器的远程网页内容 * 创建时间:2008-12-09 * 创建人:张宴(img.jb51.net) * 参数说明: * $ip 服务器的IP地址 * $host 服务器的host名称 * $url 服务器的URL地址(不含域名) * 返回值: * 获取到的远程网页内容 * false 访问远程网页失败 ************************/ function HttpVi

动态IP或无公网IP时外网訪问内网ORACLE数据库

ORACLE数据库是应用最多的一个数据库.一般项目应用.将ORACLE部署在内网,内网调用,及运维都仅仅能是内网完毕. 假设ORACLE主机或所在局域网没有固定公网IP,又想在外网对ORACLE进行訪问.就须要解决动态IP或无公网IP的问题.相应运用到动态域名解析和port映射技术应用. 可直接採用网络辅助来实现外网对内网ORACLE数据库的訪问.如NAT123动态域名解析port映射. 动态IP时,外网訪问内网ORACLE数据库的实现: 1.在内网启用NAT123动态域名解析.使用自己的域名.

Dnsmasq 解析域名到内网IP

目标:局域网的人访问某个域名时,拦截下来到指定的ip,做缓存节省带宽 配置: 1:>yum install dnsmasq -y 2 ; >vi /etc/dnsmasq.conf resolve-file=/etc/dnsmasq.resolv.conf addn-hosts=/etc/dnsmasq.hosts resolve-file指定dnsmasq从哪里获取上行DNS Server, 默认是从/etc/resolv.conf获取. addn-hosts指定dnsmasq从哪个文件中读

关于在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程

第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS",进入你购买的服务器概览界面,如下图: 4.点击左侧"实例"选项,进入你名下服务器信息界面,如下图:注意你购买服务器所在地. 获取服务器公网地址. 第二步:登录你所购买域名的供应商进行解析域名绑定服务器IP地址:如(万网)(现万网与阿里云整合在一起,所以你再阿里云也可以解析域名到你

用花生壳实现内网映射,决解无域名、无公网IP、无服务器空间问题

无域名.无公网IP.无服务器空间用花生壳提供的免费内网映射吧.你的PC就是服务器,花生壳提供的自定义二级域名轻松访问你的个人网站. 1.首先你得注册哦,然后申请免费的而已域名(2个) 2.设置路由器,下面以TP-Link-WR847N 为例 (如果登录不成功,可能是你使用了客户端并绑定了内网映射,删除映射在登录即可) 3.设置端口映射 80和8080 端口外网都无法访问进来,应该网络运营商有限制. 4.开启防火墙 5.建个站点试试,IP:192.168.129  端口:668 6.效果 都是成功

注册登陆时动态获取Host IP

当我们要AFNetWorking获取注册登陆网址时,有些时候会发现Host 提供的是一个动态IP,每次所获取的网址都不相同,特意封装了一个获取IP的方法 #import <Foundation/Foundation.h> #import "FQinterface.h" #import "AFNetworking.h" /**  这是一个用来封装这个项目网络请求的类别  */ @interface AFHTTPRequestOperationManager

AcceptEx 以及 获取远程IP与port

#include <MSWSock.h> const int NET_BUFFER_SIZE = 1024; char tAcceptRecvBuf[NET_BUFFER_SIZE] = { 0 }; LPFN_ACCEPTEX extract_AcceptEx(); LPFN_GETACCEPTEXSOCKADDRS extract_GetAcceptExSockaddrs(); unsigned int post_accept() unsigned int __stdcall accept

客户端IP地址的获取与应用(考虑多级反向代理)

在项目中,当涉及到IP地址的限制(如:内网访问等),或访问记录的存储展示等都需要获得访问者的IP地址,下面展示IP地址的获取方法: 在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了. 如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为 http://www.javapeixun.com.cn

centOS7.3新安装后,设置IP,以及Putty远程和Xshell远程 (学习是个持续的过程,也许中途放松过,但是仍然能重新捡起来,并学以致用,方为真勇士)

有一段时间没有写学习心得了:现在开始加油,再接再励. 从最基础的开始 1.安装centOS7.3之后设置IP地址.一般linux的系统都是作为服务器的系统来使用,服务器的属性注定了他的IP不能随意的更变,所以需要设置一个固定的IP地址. 一般centos系统安装完成后,IP都是通过dhcp来获得的.所以我们需要改变它的IP地址获取方式,以及设置一个静态的IP地址. 每一个系统的版本网卡的名字都不一定一样,比如centOS7.0系统之前的版面网卡就是eth0之类 "vi"是centOS