同一域名對應不同IP,訪問指定主機檔案內容的方法
阿新 • • 發佈:2019-02-05
PHP獲取遠端主機檔案內容方法很多,例如:file_get_contents,fopen 等。
則不能使用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
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); ?>