當單一域名解析至多 IP(負載平衡),file_get_contents 會隨機分發,無法指定存取某台主機。使用 fsockopen 手動建立 TCP 連線並送出 Host 標頭可解決。
remote_visit<?php
function remote_visit($ip, $host, $port, $url, $timeout){
$fp = fsockopen($ip, $port, $errno, $errstr, $timeout);
if(!$fp) 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");
return substr($response, $pos+4); // 只回傳 Body
}
// 使用
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);
?>
php.ini allow_url_fopen = On