본문 바로가기

Program(Down,Int)/(php)Web_program

서버 접속이 불가능한 상태거나 시간대에 자동 페이지 이동 - 개발자 키놀(kinor)


[준비환경]

1. PHP 작동이 가능한 웹 계정 필수 (예: cafe24.com 등의 웹 호스팅 계정)
2. 고정된 홈페이지 주소 (예: wo.to 나 dnsever.com 혹은 도메인등록업체에서 제공하는 도메인 포워딩)
3. 고정된 서버 주소 (웹서버가 설치된 PC - 고정IP를 사용하거나 DDNS 서비스를 받는 도메인)


[어떤 상황?]

남아도는 컴퓨터로 웹서버를 구축해서 운영 중인 차 아무개씨..
접속하는 사용자가 비교적 없는 새벽 2시 30분에서 5시까지는 서버로 운영하는 컴퓨터를 끄고 싶어졌다.
컴퓨터를 새벽 2시 30분에 예약 종료 하도록 하였고, 새벽 5시에 CMOS 셋업을 통해 자동으로 켜지도록 해두었다.
컴퓨터를 꺼둔 사이에 접속한 사용자들이 만일 있다면.. 이 사람들에게는 다른 안내 메시지를 보여주고 싶어졌는데..


[소스 활용하기]

아래의 PHP 소스를 메모장에 붙여 넣고 gate.php 로 저장합니다.
그리고 다음 방법대로 소스를 적절히 수정합니다.

1. autoset.org 는 웹서버로 운영하고 있는 PC의 IP주소나, DDNS 서비스 받는 도메인명으로 변경합니다.
2. 80 은 웹서가 사용하는 포트이고, 80은 기본 포트입니다.
   만약 웹서버의 포트를 변경해서 사용한다면 변경된 포트로 변경합니다.
3. 네이버 카페 주소가 들어간 부분은 서버 접속이 불가능하거나,
   서버 점검중으로 표시할 시간의 경우, 보여지는 페이지의 URL 을 기입합니다.
4. 0930 과 1030 이 입력된 부분에 각각 접속 불가 시작 시각과 종료 시각을 기입합니다. (24시각제)
   (차 아무개씨는 0230 과 0500 을 입력해야겠네요.)


그리고 포워딩하는 홈페이지 주소를 기존에는 바로 웹서버의 IP주소가 DDNS 받는 도메인명을 기입했을 것입니다.
이것을 gate.php 가 있는 주소로 변경합니다.


[어떻게 돌아가는 것?]

1. 사용자가  miniwini.wo.to 로 접속
2. http://~~~~/gate.php 로 접속하게 됨
3-1. 서버 접속이 가능한 시간대이면서, 서버 접속이 가능한 상태라면... 개인서버로 이동...
3-2. 서버 접속이 불가능한 시간대이거나, 서버 접속이 불가능한 상태라면... 안내 페이지로 이동..


[PHP 소스]

<?php

/*
// (오토셋개발자그룹 카페 답변을 위한 코드)
// 개인서버로 이동시 게이트(Gate) 페이지 역할을 하는 PHP
// 특정 시간대에는 지정된 페이지로 이동시킨다.
//
// 작성자 : 오토셋개발자그룹 - 개발자 키놀(kinor)
// http://cafe.naver.com/autoset.cafe
// http://www.autoset.org/
// 작성일자 : 2006. 11. 08. (수)
*/

class
cAutoSetHTTP
{
    var
$host = NULL
;
    var
$port = 80
;
    var
$result = false
;
    var
$closingTime = array('0000','0400'
);
    var
$InformationURL = NULL
;

    function
cAutoSetHTTP($host = NULL, $port = 80
)
    {
        
$this->host = $host
;
        
$this->port = $port
;
    }

    function
Service
()
    {
        
$this->result = $this->GetWebPage
();

        
$able = $this->CheckTime
();

        if (!
$able
)
        {
            
header('location: '.$this->InformationURL
);
            exit();
        }

        
$this->MovePage
();
    }

    function
GetWebPage
()
    {
        
$fp = @fsockopen ($this->host, $this->port, $errno, $errstr, 2
);
        if (!
$fp
)
        {
            return
false
;
        }
        else
        {
            
$data
= array();
            
fputs ($fp, "GET / HTTP/1.0\r\n\r\n"
);
            while (!
feof($fp
))
            {
                
$data[] = fgets ($fp,128
);
            }
            
fclose ($fp
);
            return
implode('',$data
);
        }
    }

    function
SetClosingTime($start = '', $end = ''
)
    {
        if (
$start == '' || $end == ''
)
            
$this->closingTime
= array();
        else
            
$this->closingTime = array($start, $end
);
    }

    function
CheckTime
()
    {
        if (
sizeof($this->closingTime) > 0
)
        {
            list(
$start, $end) = $this->closingTime
;
            
$now = date('Hi'
);

            if (
$start <= $now && $now <= $end
)
            {
                return
false
;    
            }
        }
        return
true
;
    }

    function
MovePage
()
    {
        if (
strlen($this->result) > 0
)
        {
            
header('location: http://'.$this->host.':'.$this->port
);
        }
        else
        {
            
header('location: '.$this->InformationURL
);
        }

        exit();
    }
}

$oHTTP = new cAutoSetHTTP(
'autoset.org',80);
$oHTTP->InformationURL =
'http://cafe.naver.com/autoset.cafe';
$oHTTP->SetClosingTime(
'0930','1030');
$oHTTP->Service
();

?>