同一域名对应不同IP,访问指定主机文件内容的方法

PHP获取远程主机文件内容方法很多,例如:file_get_contents,fopen 等。
<?php
echo file_get_contents('http://demo.fdipzone.com/test.php');
?>
但如果同一域名对应了不同IP,例如 demo.fdipzone.com 对应3个IP192.168.100.101, 192.168.100.102, 192.168.100.103
则不能使用file_get_contents获取 192.168.100.101的内容,因为会根据负载均衡原则分配到不同主机,因此并不能确定每次都是访问192.168.100.101这台主机。

如本地设置IP指定HOST的方法,但如果同一个程序中,需要先访问192.168.100.101,然后再访问192.168.100.102,则本地设置IP指定HOST的方法不行,因为不能将多个IP指定同一个域名。

因此,需要使用fsockopen方法去访问不同IP的主机,然后通过header设置host来访问。
使用fsockopen需要设置php.ini中的allow_url_fopen为 on。

<?php
/** 
* @param  String $ip   主机ip
* @param  String $host 主机域名
* @param  int    $port 端口
* @param  String $url  访问的url
* @param  int    $timeout 超时时间
* @return String
*/
function remote_visit($ip, $host, $port, $url, $timeout){

    $errno = '';
    $errstr = '';

    $fp = fsockopen($ip, $port, $errno, $errstr, $timeout);

    if(!$fp){ // connect fail
        return false;
    }

    $out = "GET ${url} HTTP/1.1\r\n";
    $out .= "Host: ${host}\r\n";
    $out .= "Connection: close\r\n\r\n";
    fputs($fp, $out);

    $response = '';

    // 读取内容
    while($row=fread($fp, 4096)){
        $response .= $row;
    }

    fclose($fp);

    $pos = strpos($response, "\r\n\r\n");
    $response = substr($response, $pos+4);

    return $response;
}

echo remote_visit('192.168.100.101', 'demo.fdipzone.com', 80, '/test.php', 90);
echo remote_visit('192.168.100.102', 'demo.fdipzone.com', 80, '/test.php', 90);
echo remote_visit('192.168.100.103', 'demo.fdipzone.com', 80, '/test.php', 90);

?>

转载于:https://www.cnblogs.com/fdipzone/p/3715090.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值