반응형
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);
?>
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
이미지 Etag를 이용한 사용자 판단 (0) | 2022.08.19 |
---|---|
php output_buffering 캐시 사용 (0) | 2022.08.19 |
php 변수의 이름을 가져오는 방법 (0) | 2022.08.19 |
HTTP 204와 205 애플리케이션 (0) | 2022.08.19 |
php 비동기 호출 방법 (0) | 2022.08.19 |