적수보드 리뷰(jsboard)

JSBoard란 무엇인가

예전에 리눅스 쓴다는 사람은 다 알던 URL이 하나 있었으니, 바로 모든 리눅스 책에서 빠지지 않고 소개했던 리눅스 사랑넷, 소위 적수네 동네였다. 매너없는 몇몇 몰지각한 네티즌때문에 일어난 모종의 사건으로 적수네 동네는 결국 문을 닫고 말았지만, 적수네 동네의 흔적은 아직도 많은 곳에서 찾아볼 수 있으니 하나는 적수네 동네의 방대한 Q&A와 리눅스 관련 팁 되살린 적수네 클론들이요, 또 하나는 JSBoard, 소위 적수보드다.
적수보드란 문자그대로 적수님이 자기 홈페이지에서 돌리기 위해 만들었던 PHP-MySQL 게시판에서 출발하였다. 이 게시판은 1999년 겨울 GPL로 공개되면서 http://jsboard.kldp.org에서 오픈 프로젝트로 거듭났다. 물론 적수님은 이 프로젝트 자체에는 별로 간여하지 않은 채 자기 홈에 돌리는 기존의 보드에 이런저런 기능을 추가하며 자기 편할 대로 발전시켰지만, 김정균 님을 중심으로 여러 사람들이 이 프로젝트에 참가하며 JSBoard는 레드햇, 데비안, FreeBSD는 물론 윈도우 NT/XP/2000 버전까지 등장하였다. 물론 조금만 관심을 기울이면 레드햇이나 데비안 외의 다른 리눅스 환경은 물론 솔라리스나 OpenBSD, NetBSD 등의 다양한 유닉스 환경에서도 큰 문제 없이 사용할 수 있다.
적수보드에는 몇 가지 장점이 있으며, jsboard.kldp.org 대문에 소개된 특장점은 다음과 같다.
PHP4(4.0.3 이상) 와 MySQL 을 이용한 빠르고 강력함(2.0 의 경우 PHP 4.1.0 이상 버젼 요구)
각 게시판별 관리자 제공
업로드 기능 제공 (전체 관리자에서 제어 가능)
hyper link 자동 지원
색상별 theme 지원 (1.3 이하 버젼)
design theme 기능 지원 (2.0 이상 버젼)
악성 스크립트 방지 기능 지원
html 쓰기 기능 지원
회원 전용 기능 지원 (2.0 이상 버젼)
email 수집 방지 기능 (2.0 이상 버젼)
게시물 미리보기 기능 지원
최신글 리스트 보기 기능 지원
정규 표현식 검색 기능 지원 (0.8 이상 버젼)
i18N (다중 언어) 지원
글 등록지 표시 기능 지원 및 글 등록지 정보 검색 기능 지원
글 등록시 메일 통보 기능 지원
특정 이름이나 특정 이메일로 글 등록하는 것 제한 기능 지원
글 입력 폼을 통해서만 글 등록 가능 (2.0 이상 버젼)
MultiMedia 기능 제공 (음악 동영상 파일 업로드시 일기모드에서 자동 실행)
공지사항용 게시판 지원
무단 링크 방지 기능 지원 (2.0pre4 이상 버젼)
ip blocking 기능 지원 (2.0pre4 이상 버젼)
코멘트 기능 지원 (2.0pre4 이상 버젼)
최근 공개된 대부분의 게시판에서는 모두 제공하는 기능이라고 생각할 수 있으나, 적수보드는 이런 편리한 기능 외에도 상당히 빠른 속도와 안정적인 운영으로 많은 리눅서들에게 사랑받고 있다. 그러면 언제나 누진의 방식이 그렇듯이, 이제부터 실제로 적수보드를 설치해보고 궁금한 것은 그때그때 해결해 버리도록 하자.
적수보드 설치하기

적 수보드는 설치가 쉬우면서도 PHP로 만들어진 프로그램을 설치하는데 필요한 것은 다 건드리고 넘어가는 점이 없지 않아 이것을 제대로 설치할 줄 안다면 웬만한 웹 프로그램을 설치하는 데 별다른 애로사항이 없을 것이라고 확신한다. 소스는 http://kldp.net/projects/jsboard/에서 다운로드 할 수 있다. 최신 버전은 2.0.6이다. 이번 버전에서는 comment 알고리즘이 변경되어 속도가 더욱 빨라졌고(그러나 업그레이드 시 약간의 변환이 필요하다) login.php 의 php injection 보안 버그가 수정되었다. 또한 BMP 파일 미리보기 기능이 추가되었으며, IP Blocking/HyperLink 기능이 수정되었다. 또한 테마의 배열 이름 보호 기능이 추가되었다.
그 러면 언제나처럼 프로그램을 다운로드하고 tar 명령으로 간단하게 풀어놓….고 싶겠지만, 그 전에 먼저 몇 가지를 테스트해 보자. 이것은 적수보드가 지금 설치하려는 환경에서 제대로 동작할 수 있는지 확인하는 것으로, 대부분의 PHP 프로그램을 정상적으로 설치할 때 꼭 확인해 둘만한 내용이니 꼼꼼히 살펴보자.
먼저 exec() 함수가 제대로 작동하는지 테스트해보겠다. 이 함수는 셸에서 사용할 수 있는 명령을 웹에서 실행하도록 도와주는 함수로, 실제 웹 프로그래밍을 할 때 잘못 사용하면 서버 보안에 허점이 생길 수도 있어 주의해야 한다. 그러나 대부분의 PHP 프로그램을 돌릴 때 꼭 필요하므로 다음과 같이 시험해 보자. 일단 test.php라는 이름으로 적수보드를 설치할 경로에 다음 파일을 만들어 놓는다.
<?php
echo "## exec() 함수 테스트 ##

nn”;
exec(“echo “exec()함수가 정상 작동 합니다””, $test);
echo $test[0]; ?>
이 파일을 웹에서 호출했을 때 웹 브라우저에 “exec()함수가 정상 작동 합니다”라는 문장이 출력되면 exec() 함수를 사용할 수 있는 것이다.
다 음으로 대부분의 게시판이 그러하듯이 적수보드 역시 11월에 다루었던 것과 마찬가지로 MySQL 데이터베이스를 사용한다. 그러나 PHP에서 MySQL을 제대로 연동하여 사용할 수 있어야 게시판이 정상적으로 작동할 것이다. 지난 달에 다루었던 phpMyAdmin을 설치하여 정상적으로 사용할 수 있었다면 별 문제 없겠지만, 이런 류의 것을 처음 설치해본다면 반드시 다음과 같이 info.php 파일을 만들도록 한다.

이 함수는 현재 서버에 설치된 PHP에 지정된 옵션과 환경을 자세히 보여준다. 이 옵션 중에서 MySQL에 대한 내용이 있는지 반드시 확인한다. 단, PHP는 RPM으로 설치하고 MySQL만 소스로 따로 설치한 경우에는 PHP가 인식하는 경로와 실제 경로가 달라 에러가 발생할 수 있다. 확인이 끝났다면 이 파일은 삭제한다. 자기 서버의 정보를 아무에게나 보여주고 싶다면 할 수 없는 일이지만.
조금 더 자세히 살펴보자. root 사용자라면 다음과 같은 파일을 만든다. MYSQL_ROOT_PW에는 MySQL root 패스워드를 적어준다. 사용자의 계정 패스워드와는 다른 것이므로 주의하자.

계정 사용자는 같은 방식으로 다음과 같은 파일을 만든다. MySQL_USER에는 MySQL을 사용하는 이름을, MYSQL_PW에는 해당 MySQL 계정의 패스워드를 적는다.

이 파일의 내용은 주어진 사용자 이름과 패스워드를 바탕으로 제대로 접속되는지 확인하는 것이다. 대부분의 서버에서 mysql.sock의 위치는 위에서 지정한 대로 /var/lib/mysql/에 있겠지만, 제대로 접속되지 않은 경우 netstat -anp | grep mysql 명령으로 이 소켓의 위치를 확인하여 적어준다. MySQL 서버가 웹 서버와 별도의 서버에서 운영되고 있다면 MySQL 서버의 IP 주소를 적어 준다. 실제로 많은 호스팅 업체에서 웹 서버와 DB 서버를 분리하므로 주의해야 한다.
다음 설정은 아파치 웹 서버에 대한 것이다. 대부분의 호스팅 업체에는 이 설정이 반영되어 있어 큰 문제가 없지만, 개인적으로 서버를 만들어 운영할 때에는 꼭 설정해 두어야 한다. 제대로 설정되지 않았다면 실행하기 어려우므로, 관리자에게 연락하여 설정한다.
jsboard 에서 인덱스 파일은 html이 아니라 index.php 이다. http://도메인/jsboard로 접속했을 때 제대로 된 화면을 보고 싶다면 아파치의 전체 설정 파일인 httpd.conf를 열어 DirectoryIndex 지시자에 index.php를 추가한다.
또한 각종 설정 파일의 보안을 위해서 httpd.conf에서 AddType application/x-httpd-php .php .php3 설정에 몇 가지를 추가해 둔다. 여기 설정된 파일에서 php 관련 코드가 나오면 서버가 해석하여 보여주므로, 설정 파일 등이 바로 노출되는 것을 피할 수 있다. 적수보드만 사용한다면 .ph를 설치하는 것만으로 충분하며, 대개 .html, .htm, .ph, .inc 등을 설정한다. 경우에 따라 악성 코드가 실행되는 것을 막기 위해 자바스크립트나 VB 스크립트 파일도 여기 함께 설정해 두기도 한다.
다음으로, 대개의 서버에서는 제대로 설정되어 있는 php.ini 파일을 설정한다. 대부분 기본 설정만으로도 작동하는 데 큰 무리가 없지만 때때로 몇몇 옵션이 잘못 설정되어 있는 경우가 있으므로 혹시 제대로 동작하지 않을 경우 이 파일을 확인한다. 먼저 적수보드가 제대로 작동하지 않을 경우 short_open_tag 설정을 확인한다. 일부 배포판에서 기본으로 설정된 내용에서는 OFF로 설정되어 있는데, ON이 아니면 제대로 동작하지 않는다. 또한 post_max_size 옵션을 넉넉히 설정한다. 이 옵션이 너무 적게 설정되어 있으면 업로드 할 수 있는 파일 크기에 제약이 심해져 불편하다.
또한 글쓰기를 할때 ‘ 또는 ” 문자가 제대로 입력이 안되고 에러가나는 경우가 존재한다. 예전에는 이런 문자를 따로 처리해 주어야 했지만 지금은 php.ini에서 다음과 같이 지정하는 것만으로 충분할것이다.
magic_quotes_gpc = ON
magic_quotes_runtime = OFF
magic_quotes_sybase = OFF
여기까지 확인했으면 이제 소스를 풀어 놓겠다. 언제나처럼 tar 명령으로 소스를 풀어 보자.
tar xvpfz jsboard-2.#.#.tar.gz
z 옵션을 붙이면 gz로 묶인 것까지 한방에 끝낼 수 있다는 것은 다들 잊지 않으셨으리라 생각한다. 이렇게 소스 파일을 풀어 놓으면 jsboard라는 디렉토리가 만들어지고, 다시 다음과 같은 기본 디렉토리가 만들어진다.
admin : 웹으로 접속하여 관리자 명령을 실행한다.
doc : 설치 관련 문서와 참고 문서가 들어 있다. 사실 별로 쓸모는 없는데다 설치 문서도 웹에서 바로 확인할 수 있으므로 설치후 삭제한다.
html : 모든 게시판에 적용할 기본 머리말/꼬리말 파일이다. 모든 게시판의 앞뒤에 카피라이트나 메뉴와 같은 공통된 내용을 넣고 싶을 때 사용한다.
images : 기본으로 사용되는 이미지가 들어간다. 게시판에 파일을 업로드했을 때 파일의 종류를 나타내는 아이콘도 들어 있다.
include : 주요 설정 파일들이 들어 있다.
theme : 테마 파일이 들어 있다. 테마 파일은 별도로 다운로드하여 사용할 수 있다.
INSTALLER : 설치에 필요한 파일이 들어 있다.
물론 이 소스코드 중 최상위 디렉토리인 jsboard에도 PHP 파일은 들어 있다. 최상위 디렉토리에 놓인 파일은 대부분 실제 보드에서 글을 올리고 읽고 수정하는 등의 실제적인 작업을 하는 데 사용된다. 글 목록을 보여주는 list.php, 글쓰기 폼인 write.php 등 직관적인 이름으로 되어 있으니 참고하기도 편리하다.
실제 설치가 끝나면 이 구조에 data 디렉토리가 추가될 것이다. 또한 설치가 끝나면 doc 디렉토리와 INSTALLER 디렉토리는 삭제한다. 특히 INSTALLER 디렉토리는 보안을 위해 반드시 삭제한다.
그러면 이제 이 소스를 사용하여 실제로 보드를 설치해보자. jsboard/doc/ko/install 문서를 참고하여 다음과 같이 명령을 실행한다.
$ cd ~/www/jsboard/INSTALLER/script
$ ./preinstall

$
########################################################
# JSBoard Pre Installer v2.0 #
# Scripted By JoungKyun Kim #
########################################################

STEP 1 Language Check
———————
Can you enable to use KOREAN in this console? [Y/N](default Y) : y

아파치가 nobody 의 권한으로 작동하고 있는듯 싶습니다.
맞습니까? (이 값은 httpd.conf 의 Group 지시자에 설정되어
있는 값과 일치해야 합니다. [Y/N](default Y) : n

httpd.conf 의 Group 지시자의 값을 적어 주십시오 : apache

작업이 완료 되었습니다. 브라우져로 jsboard/INSTALLER/ 로 접속하여
설치를 계속 하시기 바랍니다.
$
아파치 그룹 권한은 httpd.conf에 지정한 GROUP 지시자의 값과 같이 설정한다. 같으면 y를, 틀리면 n를 선택하며, n을 선택한 경우 위와 같이 별도로 그룹을 설정한다. y를 선택한 경우 바로 작업을 완료한다. 대개는 nobody로 충분하나, 레드햇에서 기본 설치된 아파치에는 apache로 그룹을 지정해야 할 것이다. 계정 사용자의 경우는 나오는 메시지에 따르면 된다.
이 과정이 끝났으면 jsboard/INSTALLER/include/passwd.ph 를 편집한다.

MySQL_ROOT_PASSWORD 부분에 MySQL 의 root password 를 넣어 준다. 이 변수를 근거로 웹에서 설치할 때 데이터베이스에 접근하므로 정확히 넣어 주어야 한다. 다음으로 apache web server의 설정 파일인 httpd.conf가 있는 경로를 정확히 지정한다. mysql의 소켓 파일은 다음 명령으로 확인하여 지정해 넣는다. 잘 모르겠으면 localhost라고 입력하면 된다,
netstat -anp | grep mysql 또는 mysql_config –socket
여기까지 끝났으면 웹 브라우저에서 http://domain.com/jsboard/INSTALLER/로 접근한다.
먼 저 언어를 선택한다. 한글을 선택하고 [submit] 을 클릭하면 적수보드와 관련된 라이센스가 설명된다. [AGREE]를 클릭하면 환경 설정 검사 화면이 나온다. 자동으로 환경 설정을 검사할 수 있으며, 리눅스용 브라우저를 사용하거나 DB 서버가 웹 서버와 분리되어 있는 경우에는 제대로 넘어가지 않거나 에러가 발생하므로 직접 수동 설치를 해야 한다. 일단은 제대로 넘어갔다고 가정하고 자동 설치로 진행하겠다. 이 부분에서는 특별히 할것없이 5초간 기다리기만 하면 된다. 이 부분에서 OS Type, MySQL 연동 체크, exec() 함수 사용여부, httpd.conf의 index file 설정 여부, jsbaord 를 사용하기 위한 권한설정 여부를 체크한다. DB 서버가 독립되지 않았고 다른 설정이 정상적인데도 에러 메시지가 뜬다면 http.conf 파일에서 DirectoryIndex 지시자의 앞에 공백 문자가 있는지 확인하고 삭제한다. 대개의 경우 에러 내용을 자세히 화면에서 설명해 주므로 해당 내용을 점검하면 된다.
별다른 에러가 없으면 MySQL의 root 패스워드를 입력할 차례다. 계정 유저는 MySQL root password 대신 사용하는 MySQL 계정의 db 로그인 패스워드를 입력한다.
그 다음 화면에서는 DB와 관련된 각종 설정 사항을 입력한다. root로 접근할 경우 게시판용으로 사용할 새로운 데이터베이스를 생성할 수 있다. 이때 DB name과 DB user는 MySQL에 등록이 되어 있지 않은 것을 사용한다.
Admin value 는 2.0 부터 추가되는 인증 모듈을 위해 설정하는 것으로, 여기서 지정하는 id, name, email 은 jsboard 2.0 의 전체 관리자 정보를 부여한다.
Enter 를 클릭하면 등록을 완료했다고 알리는 동시에 패스워드를 변경할 것을 권하는 경고창이 뜨면서 로그인 페이지로 이동한다.
적수보드 수동 설치하기

앞서 살펴본 일반 설치와 마찬가지로 압축을 풀어놓는다. INSTALLER/SQL로 이동하여 먼저 적수보드에서 사용할 기본 테이블을 만들어 둔다.
$ cd jsboard-version/INSTALLER/SQL
$ mysql -u 사용자 -p 디비 < board-$ostype.sql
Enter password: 패스워드

$ mysql -u 사용자 -p 디비 < userdb-$ostype.sql
Enter password: 패스워드
테이블을 생성했으면 jsboard/INSTALLER/script 에서 root나 일반 사용자에 해당하는 파일을 각각 실행한다. root라면 root를 실행하고 일반 사용자라면 account를 실행한다. 역시 아파치 유저 권한과 그룹 권한을 확인한다. 이 값들은 httpd.conf 의 USER, GROUP 지시자와 같아야 한다.
config/global.ph config/spam_list.txt file 의 group 소유권은 nobody에게 있어야 한다. 만약 위의 파일들의 그룹 소유권을 변경할 수 없다면 permission 을 606으로 설정한다. 이 내용은 db의 password를 가지고 있는 file을 보호하기 위한 것을 설명한다. 즉 다른 유저가 db 의 패스워드를 볼수 없도록 하기 위한 것으로 이 부분은 root(서버 관리자) 가 해 주어야 할 부분이다. 만약 이것이 불가능 하다면 이 파일들의 권한을 606 으로 설정하라는 의미이다. 물론 후자의 경우 운영은 가능하지만 보안 문제가 발생할 수 있으니 주의한다. account로 설치할 경우 보안 문제가 있을 수 있으므로 홈 디렉토리 권한은 반드시 711로 지정한다.
jsboard/config/에서 global.ph를 수정한다. 기본적으로 다음 내용을 수정해 둔다.
############################################################################
# DATABASE Configuration
############################################################################
$db[server] = ":/var/lib/mysql/mysql.sock"; # DB address
$db[user] = ""; # DB login user
$db[pass] = ""; # DB login pass
$db[name] = ""; # DB name
쉽게 이해하겠지만 역시 DB 서버와 사용자 이름, 패스워드, DB를 적으면 된다.
$board[path] = "http://domain.com/jsboard/";
$board[path] 의 값은 jsboard가 설치 되어 있는 웹 경로를 지정해 주면 된다. 제일 마지막을 /로 끝내는 것이 주의한다.
$board[antispam] = "@SPAM1@:@SPAM2@:@SPAM3@";
이 설정은 스팸 등록기에 의한 무차별적 광고 살포를 막기 위한 것으로, SAPM1에는 5자리 정수를, SPAM2와 3에는 2자리의 정수를 임의로 집어넣는다. 예를 들면 다음과 같다.
$board[antispam] = "16692:38:89";
이 설정은 list나 read 페이지를 거치지 않고 바로 write 페이지에 접근하는 것을 막는 설정으로, 이 설정이 잘못 되었을 경우 글을 등록할 수 없다.
$jsboard = "login";
이 변수의 기본값은 login이지만, 임의의 단어나 무작위 문자열로 설정해준다. 이 문자열은 login 변수명이 되므로 중요하다
$print[dpage] = "http://domain.com/jsboard/list.php?table=test";
로그인 후 이동할 기본 페이지를 설정한다.
그러면 웹 브라우저를 사용하여 http://도메인/jsboard/admin으로 접속한다. admin으로, 패스워드는 기본값인 0000으로 접속한다. 일단 로그인한 뒤 가장 먼저 할 일은 패스워드를 0000 아닌 다른 것으로 교체하는 것이다. 패스워드를 바뀐 뒤에는 로그아웃을 했다가 다시 접속한다. 로그인에 성공하면 "전역변수 설정" 을 클릭하여 다음 내용을 변경한다.
$jsboard = "login";
$print[dpage] = "http://domain.com/jsboard/list.php?table=test";
$board[path] = "http://domain.com/jsboard/";
위의 내용은 아직 바꾸지 않았다면 꼭 바꾼다.
$compare[name] = "쥔장";
$compare[email] = "user@localhost.com";
이 설정은 전체 관리자의 패스워드로만 이름과 email 을 등록할수 있도록 제한하는 기능이다. 관심이 있으면 다른 설정도 이것저것 건드려보자.
설정 파일은 config 디렉토리 아래에 들어간다. 먼저 전체 설정 파일인 global.ph를 알아보자. 앞서 설명한 내용은 넘어가겠다.
$board[title] = "JSBoard"; # Board title
웹브라우저의 타이틀에 나올 문자열이다. 수정하지 않아도 상관없다.
$board[width] = "550"; # Board width
admin 에서 사용될 테이블의 길이를 지정한다. 그냥 기본값으로 두면 된다.
$board[tit_l] = 42; # Max lenth of subject field
$board[nam_l] = 8; # Max lenth of writer field
$board[perno] = 10; # Article number per page
$board[plist] = 2; # Print page link number (x2+1)
$board[uconf] = 1; # Permited to use configuration per user
예비 지시자이다. 각각의 게시판을 생성하고 나면 게시판마다 관리자 화면에서 다르게 설정할 수 있으므로 여기에서는 건드리지 않는다.
$board[date_fmt] = "Y.m.d"; # format of date
jsboard 에서 사용할 날짜 표기 방식이다.
$board[cookie] = 30;
며칠동안 이름, 메일, 홈페이지 주소를 담은 쿠키를 구워 놓을 것인지 지정한다.
$board[hl] = "STR“;
적수 보드에서 검색 기능을 사용하면 검색한 단어는 다른 단어와 다르게 표시된다. 이 부분의 스타일을 조절하여 검색한 문자의 색상을 조절한다. 기본값은 굵고 밑줄이 들어간 상태이다.
$board[align] = “center”;
게시판의 정렬상태를 지정한다. center, right, left 3가지중 하나를 선택할수 있다.
$upload[yesno] = 1; # enable upload
$upload[dir] = “files”; # directory name of upload file
$upload[maxsize] = “2000000”; # upload max size
업로드 관련 설정이다. yesno 는 업로드 여부를 설정하는 것으로 0으로 지정하면 모든 게시판에서 업로드를 불허한다. 1로 놓아두고 각각의 게시판마다 개별 설정한다. dir 은 업로드될 파일들이 저장될 디렉토리를 지정한다. 업로드된 파일들은 data/*/$upload[dir]/년월일시분초/upload_file.확장자 로 저장이 된다. maxsize 는 업로드가 가능한 최대 파일 사이즈를 byte 단위로 설정을 한다.
$board[useipbl] = 0;
접속하는 IP address 를 막는 기능의 사용여부를 결정한다. 1 로 설정을 하면 특정 IP를 불록할 수 있다. 만약 전체 게시판에 일률적으로 적용을 하고 싶다면, $board[ipbl] 이라는 변수를 $board[userdhyper] 아래에 지정한다. ipbl은 블록할 IP를 각각 ;로 구분하여 입력한다.
$board[usedhyper] = 0;
무단 링크 방지 기능이다. 0으로 하면 전체 게시판을 원격지에서 링크할 수 없으며, 1로 설정하고 각 게시판마다 허용 여부를 결정하는 것이 좋다.
##############################################################################
# Mail Configuration
##############################################################################
$rmail[uses] = 1;
# MTA configuration
# no value -> send mail with self method of JSBoard
# mail server address -> send mail with selected mail server
# WARN : windows version can’t select self method of JSBoard
$rmail[mta] = “127.0.0.1”;
# charactor of converted mail address
$rmail[chars] = “__at__”;
메일에 대한 설정으로 글을 등록했을 때 관리자에게 메일을 보내주거나 또는 답장을 올렸을 경우 원본글에 이메일이 등록되어 있을 경우 원본글을 올린 사람에게 메일을 발송하도록 하는 기능이다. 게시판 방문자가 상당히 적은 경우에 사용하면 편리하다. uses 를 0 으로 지정을 하면 각 게시판 설정에서 이를 설정해도 전혀 작동하지 않는다.
$rmail[mta] 는 JSBoard 가 메일을 발송할 방식을 지정하는 것으로, 아무 값도 없으면 적수보드 자체에서 메일을 발송한다. 별도의 메일 데몬 없이도 사용할 수 있지만, 속도가 느려지므로 데몬이 있다면 localhost와 같이 지정한다.
$rmail[chars]에 지정한 문자열은 게시판에 메일 주소를 남겼을 때 @ 대신 들어간다. 이 방식으로 메일 수집기가 내용을 긁어가더라도 제대로 사용할 수 없게 만든다. 자기만의 독특한 특수문자를 사용하는 것을 권한다.
$list[pre] = 1; # enable preview
글 제목에 마우스를 대면 미리 보기를 할 수 있다.
각각의 게시판은 8가지 관리 모드 중 하나를 선택할 수 있다.
공개 게시판 : 로그인을 안해도 상관이 없지만 admin 로그인을 했을 경우에는 인증이 필요없음.
공개 게시판(공지전용) : admin 인증을 하지 않는한 로그인을 하든 말든 read 만 가능함. admin 의 경우 모든 기능을 사용가능
로그인 게시판 : 로그인시 모든 기능 사용가능. 수정,삭제에 한해서는 자신의 글만 가능(admin 의 경우 제한 없음)
로그인 게시판(공지전용) : 로그인시 읽기만 가능. admin 에게만 모든 권한이 있음.
공개 게시판(읽기와 답장, 그리고 자기글만 삭제 가능) : admin 로그인 시에만 쓰기가 가능함. 읽기 댓글은 누구나 가능. 그 외에는 패스워드로 수정 삭제가 가능함.
로그인 게시판(읽기와 답장, 그리고 자기글만 삭제 가능) : admin 로그인 시에만 쓰기가 가능함. 읽기와 댓글은 로그인을 한 유저들만 가능. 그외에는 자신의 글만 수정 삭제 가능.
공개 게시판(관리자만 답장 가능) : admin login 시에만 답장이 가능함. 나머지는 모두 가능
로그인 게시판(관리자만 답장 가능) : admin login 시에만 답장이 가능함. 나머지는 login user 들만 모두 가능
그 외의 설정은 관리 화면에서 필요한 대로 입력하면 되므로 생략하겠다.
스팸 단어 등록은 config/spam.ph 파일에 직접 입력하는 것은 물론, OOPS administration에서 직접 스팸 단어를 등록해 놓을 수 있다. 게시판에 올라오지 않기를 바라는 단어나 문장을 등록하여 스팸을 막을 수 있으며, 이런 단어를 한줄씩 입력한다. 단, 제일 마지막 줄에 공백이 들어가서는 안된다. 주로 네떼루마니, CCN, 비밀번호, 1111, 12345, 궁합 등 광고글에 많이 사용되는 단어를 입력하면 좋을 것이다.
필터링 기능은 사용하는 php 의 mbstring 함수 지원여부에 따라 작동이 조금 틀리다. mbstring 은 4.0.6 부터 지원을 하며, 컴파일 시에 –with-mbstring 옵션을 지정하여 설치할 수 있다. 이 기능이 지원된다면 키워드를 한글 1자, 영문 2자 이상으로 지정할 수 있으나 이 기능을 사용할 수 없다면 한글 2자 영문 3자 이상으로 지정해야 한다. 2byte 만 적었을 경우 한글의 첫글자의 2 byte 와 2번째 글자의 1 byte 가 조합이 되어 전혀 엉뚱한 단어로 인식하고 필터링할 수 있기 때문이다. 또한 PHP에서 지원하는 정규식을 사용할 수 있어 더욱 편리하게 필터링할 수 있다. 예를 들어 다음과 같이 설정할 수 있다.
리(눅스|누진|수진|누스|눅스매거진)
이렇게 한 줄 설정하는 것만으로도 리눅스, 리누진, 리수진, 리누스, 리눅스매거진을 모두 필터링할 수 있다.
머리말과 꼬리말 설정하기

다음과 같은 파일 2개를 만들어 저장한다.
head.inc
============================================

수진이의 홈페이지

</table
=============================================
tail.inc
=============================================

수진이의 글 수진이의 방명록 첫 화면으로
메일은 soojin@linuzine.com으로!

=============================================
이 파일을 서버에 업로드하고, 각 게시판의 설정 화면으로 들어가 머리말과 꼬리말에 각각 다음과 같이 설정했다.
머리말 설정 :
꼬리말 설정 :
이제 게시판을 열어보면 게시판의 위와 아래에 앞서 만든 inc 파일의 내용이 들어 있는 것을 볼 수 있다. 대부분의 홈페이지에서는 모든 페이지에서 공통된 메뉴를 사용하므로 이런 방식으로 메뉴를 만들어 include 하고 필요할 때마다 메뉴를 수정하면 편리하게 관리할 수 있다.
최근글만 보여주기

적수보드는 제로보드나 이지보드와 마찬가지로 최신글을 출력할 수 있다. 이 기능은 include/prelist.ph에 들어 있어, 최근글 목록을 보여줄 파일에 include하여 사용한다.
일단 먼저 jsboard/include/prelist.ph에서 $prlist[path] 와 $prlist[wpath] 변수값을 설정한다. $prlist[path] 는 JSBoard 가 설치된 절대 경로를 적어 주며, $prlist[wpath] 는 JSBoard 가 출력되는 웹경로를 적는다. 마지막에 /는 적지 않는다.
$prlist[path] = “/home/httpd/html/PHP/jsboard”;
$prlist[wpath] = “http://domain.com/PHP/jsboard”;
이제 준비가 다 되었다. index.html 파일에 prelist.ph 파일을 include하고, 목록을 출력하려는 부분에 다음과 같이 함수를 입력한다.

여러개의 게시판을 한 페이지에서 출력하고 싶다면 위의 코드의 값만 적당히 변경하여 여러 번 적어준다. 원하는 디자인을 구성하고 싶다면 prlist() 함수를 호출하기 전에 $prlistTemplate 라는 변수에 원하는 디자인을 정의하면 된다. 이 원형에서 다음을 참고하여 같은 방식으로 출력할 내용이나 디자인을 정의할 수 있을 것이다.
P_SUBJECT_ : 제목을 치환
P_NAME_ : 이름을 치환
P_EMAIL_ : 이메일을 치환
P_DATE_ : 글 등록시간을 치환
P_REFER_ : 조회수를 치환
P_LNAME_ : 이메일이 있을 경우 이메일 링크가 된 이름을 치환
제목 링크에 target 이나 onClick 같은 것을 넣고 싶다면 $prlistTemplate 변수 앞에 $prlistOpt 변수를 TARGET=_blnak나 onClick(…)과 같이 지정한다.

(2003년 프로그램세계 기고했던 내용)

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.