개발 꿀팁/PHP

동일한 도메인이 서로 다른 IP에 대응하여 지정된 호스트 파일의 내용에 접근하는 방법

Jammie 2022. 8. 19. 12:37
반응형

PHP는 file_get_contents, fopen 등 원격 호스트 파일의 내용을 취득하는 방법이 많다

<?php
echo file_get_contents('http://demo.fdipzone.com/test.php');
?>

그러나 같은 도메인이 서로 다른 IP를 가지고 있다면 예를 들어 demo.fdipzone.com은 3개의 IP 192.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가 동일한 도메인을 지정합니다.

따라서 서로 다른 IP의 호스트에 fsockopen 방식으로 접속한 후 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 c
* @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);
 
?>

 

반응형