程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 同一域名對應不同IP和訪問指定主機文件內容的方法

同一域名對應不同IP和訪問指定主機文件內容的方法

編輯:PHP綜合

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);
?>

From:csdn博客 傲雪星楓

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved