컴퓨터

[PHP] 특정 사이트의 온라인/오프라인 상태 알아내기

Selnis 2011. 6. 23. 22:10
PHP의 fsockopen() 함수를 이용하여 서버의 온라인/오프라인 상태를 알아볼 수 있습니다.


기본 형태

<?php
@$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";
    }
}
?>

이렇게 함수로 만들어두면 여러 호스트에 걸쳐서 결과를 출력해야 할 때에 정말 유용하죠.

<?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);
?>

그러면 이를 조금 더 응용하여 실용적으로 사용할 수 있게끔 고쳐봅시다.




활용(응용)방법 예시

특정 호스트의 온라인/오프라인 상태를 알아내어, 온라인 상태라면 링크를, 오프라인 상태라면 오프라인이라는 표시를 해보도록 하는겁니다.

<?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 />
";

?>

어떻습니까?

간단한 응용만으로 사이트의 온라인/오프라인 상태를 자동으로 탐지하고, 살아있는 사이트에 대해서만 링크를 제공하는 멋진 효과를 구현해내었습니다.

만약 개인 서버 등을 운영하신다면, 이런 식으로 페이지를 제작하면 이용하는 입장에서는 정말 편리하겠죠?


예제

예제는 이곳을 클릭하시면 보실 수 있습니다.