2013년 12월 3일 화요일

Apache+PHP 환경에서 웹 페이지 최종 수정 날짜 표시하기

자료출처 : 한빛미디어(주) 「한빛 네트워크 기사 공모전」 입선작: 김민철

웹 서비스를 제공할 때, 각 페이지마다 파일의 최종 업데이트 일을 표시하고 싶을 때가 있다. 아래와 같이 말이다.
"이 페이지의 최종 수정일은 0000년 00월 00일 입니다."
또는
"Last MODIFIED 0000/00/00"
여기서의 업데이트 일이란, 시스템의 시간을 자동으로 알아내어 페이지의 상단에 "오늘은 몇 년 몇 월 며칠입니다."라고 표시하는 것, 그리고 기사의 DB입력 시간을 의미하는 것이 아니다. 순수하게 해당 페이지의 최종 제작/수정 날짜를 말하는 것이다.

사용자가 접속한 페이지의 제작/수정일을 표시하는 작업은 아래와 같은 절차를 통해 간단하게 해결할 수 있다.
  1. 페이지를 히트할때 페이지의 이름을 알아낸다.
  2. 페이지 이름을 이용해 유닉스/리눅스 시스템에서의 최종 수정 날짜를 확인한다.
  3. 웹 페이지에 원하는 형태로 출력한다.
아파치 환경변수를 이용해 파일 이름 알아내기

만약 브라우저를 이용해 접속한 페이지가 "http://network.hanbitbook.co.kr/view_news.htm?serial=398" 라면 각각의 아파치 환경변수에는 다음과 같은 값들이 대입된다.

Environment Value
$HTTP_HOST network.hanbitbook.co.kr
$SCRIPT_FILENAME /서버상의절대경로/view_news.htm
$QUERY_STRING serial=398
$REQUEST_URI /view_news.htm?serial=398
$SCRIPT_NAME /view_news.htm


이러한 변수들은 PHP 코딩시 아래와 같은 방법으로 확인해 볼 수 있으며, phpinfo();를 이용하면 "Apache Environment" 부분에서 대부분의 아파치 환경변수를 살펴볼 수 있다. 우리에게 필요한 것은 페이지의 실제 파일 이름만 알아내는 것이므로, 서버 환경변수인 "$SCRIPT_NAME"을 이용해 "/filename.html" 식의 파일값을 획득한 다음, 이것을 PHP함수인 "basename()"을 이용해 "/"를 제거한 순수 파일 이름만 추출해 주면 된다. 위와 같이 페이지를 만들어 브라우저로 띄우면, "/filename.html" 에서 "/"을 제외한 "filename.html"이라는 값이 출력되는 것을 확인할 수 있다. 우리에게 필요한 코드는 아래와 같다.
$file_name = basename("$SCRIPT_NAME");
파일의 최종 수정 날짜 알아내기

파일의 시간관련 속성을 확인하는 함수로는 filectime(), fileatime() 등이 있다. filectime()은 해당 파일의 최종 수정일을, fileatime()은 해당 파일의 최종 접근일(access or hit)을 UNIX 타임스탬프 형태로 되돌려주는 기능을 한다. 여기에서 필요한 것은 최종 수정일이므로 다음과 같이 최종 수정일을 확인할 수 있다.
$modify_datetime = filectime($file_name);
그런데, UNIX 타임스탬프 형태를 "년-월-일"과 같이 우리가 알아볼 수 있게 변환해 주어야 하는데 간단히 date() 함수를 이용해 변환하면 된다.
$modify_date = date(Y-m-d", $modify_datetime);
$modify_date에 파일이 수정된 날짜가 년-월-일 형태로 대입되어 있으므로, 이 값을 보기 편하게 출력해 주기만 하면 모든 작업은 끝난다. 완성된 소스는 아래와 같이 간단하다.

댓글 없음:

댓글 쓰기