컴퓨터
[PHP] 특정 사이트의 온라인/오프라인 상태 알아내기
Selnis
2011. 6. 23. 22:10
PHP의 fsockopen() 함수를 이용하여 서버의 온라인/오프라인 상태를 알아볼 수 있습니다.
참 간단하죠? ^^;
이렇게 함수로 만들어두면 여러 호스트에 걸쳐서 결과를 출력해야 할 때에 정말 유용하죠.
그러면 이를 조금 더 응용하여 실용적으로 사용할 수 있게끔 고쳐봅시다.
어떻습니까?
간단한 응용만으로 사이트의 온라인/오프라인 상태를 자동으로 탐지하고, 살아있는 사이트에 대해서만 링크를 제공하는 멋진 효과를 구현해내었습니다.
만약 개인 서버 등을 운영하신다면, 이런 식으로 페이지를 제작하면 이용하는 입장에서는 정말 편리하겠죠?
기본 형태
<?php
@$socket = fsockopen("호스트명", 포트번호, $errno, $errstr, 요청시간);
if(!$socket) {
return "Offline";
} else {
fclose($socket);
return "Online";
}
?>
@$socket = fsockopen("호스트명", 포트번호, $errno, $errstr, 요청시간);
if(!$socket) {
return "Offline";
} else {
fclose($socket);
return "Online";
}
?>
참 간단하죠? ^^;
함수로 이용
당연한 말이지만 이를 함수로 만들어서 쓸 수도 있습니다.
<?php
function server_check($host, $port) {
@$socket = fsockopen($host, $port, $errno, $errstr, 요청시간);
if(!$socket) {
return "Offline";
} else {
fclose($socket);
return "Online";
}
}
?>
function server_check($host, $port) {
@$socket = fsockopen($host, $port, $errno, $errstr, 요청시간);
if(!$socket) {
return "Offline";
} else {
fclose($socket);
return "Online";
}
}
?>
이렇게 함수로 만들어두면 여러 호스트에 걸쳐서 결과를 출력해야 할 때에 정말 유용하죠.
<?php
// 호스트명:포트번호 에 대해
echo server_check("호스트명", 포트번호);
// ex) blog.shar.kr:80
echo server_check("blog.shar.kr", 80);
// ex) ftp.shar.kr:21
echo server_check("ftp.shar.kr", 21);
?>
// 호스트명:포트번호 에 대해
echo server_check("호스트명", 포트번호);
// ex) blog.shar.kr:80
echo server_check("blog.shar.kr", 80);
// ex) ftp.shar.kr:21
echo server_check("ftp.shar.kr", 21);
?>
그러면 이를 조금 더 응용하여 실용적으로 사용할 수 있게끔 고쳐봅시다.
활용(응용)방법 예시
특정 호스트의 온라인/오프라인 상태를 알아내어, 온라인 상태라면 링크를, 오프라인 상태라면 오프라인이라는 표시를 해보도록 하는겁니다.
<?php
// 위에서 생성한 함수에 $name(편의상 표기할 사이트명) 을 추가하였습니다.
function server_check($host, $port, $name) {
@$socket = fsockopen($host, $port, $errno, $errstr, 1);
if(!$socket) {
// $name is currently offline status. (오프라인 상태)라는 문장을 리턴해줍니다.
return $name." is currently <sapn style=\"color:FFA0A0;\">offline status</span>.";
} else {
fclose($socket);
// 온라인 상태를 표기하려면 다음 주석을 해제하도록 합니다.
//return $name." is currently <sapn style=\"color:00FF00;\">online status</span>.";
// $name (on $host) 에 대한 하이퍼링크를 리턴합니다.
return "<a href=\"http://".$host.":".$port."\">".$name." (on ".$host.")</a>";
}
}
echo "
<!-- 편의상 html 구현은 생략합니다. -->
<!-- 표시할 사이트를 다음 형식으로 적어나가면 됩니다. -->
".server_check("호스트명", 포트번호, "편의상 표기할 사이트명")."<br />
<!-- 다음은 예시입니다. -->
".server_check("blog.shar.kr", 80, "Blog")."<br />
".server_check("fs.shar.kr", 80, "File Server")."<br />
";
?>
// 위에서 생성한 함수에 $name(편의상 표기할 사이트명) 을 추가하였습니다.
function server_check($host, $port, $name) {
@$socket = fsockopen($host, $port, $errno, $errstr, 1);
if(!$socket) {
// $name is currently offline status. (오프라인 상태)라는 문장을 리턴해줍니다.
return $name." is currently <sapn style=\"color:FFA0A0;\">offline status</span>.";
} else {
fclose($socket);
// 온라인 상태를 표기하려면 다음 주석을 해제하도록 합니다.
//return $name." is currently <sapn style=\"color:00FF00;\">online status</span>.";
// $name (on $host) 에 대한 하이퍼링크를 리턴합니다.
return "<a href=\"http://".$host.":".$port."\">".$name." (on ".$host.")</a>";
}
}
echo "
<!-- 편의상 html 구현은 생략합니다. -->
<!-- 표시할 사이트를 다음 형식으로 적어나가면 됩니다. -->
".server_check("호스트명", 포트번호, "편의상 표기할 사이트명")."<br />
<!-- 다음은 예시입니다. -->
".server_check("blog.shar.kr", 80, "Blog")."<br />
".server_check("fs.shar.kr", 80, "File Server")."<br />
";
?>
어떻습니까?
간단한 응용만으로 사이트의 온라인/오프라인 상태를 자동으로 탐지하고, 살아있는 사이트에 대해서만 링크를 제공하는 멋진 효과를 구현해내었습니다.
만약 개인 서버 등을 운영하신다면, 이런 식으로 페이지를 제작하면 이용하는 입장에서는 정말 편리하겠죠?