##### JSBOARD + OOPS administartion Center #####################################
#
#  Original Developer   : 김병찬 <redhands at linux.sarang.net>
#  Source Disturibute   : 김정균 <admin at oops.org>
#  Maintainer           : 김정균 <admin at oops.org>
#  Source Disturibute   : 홍영득 <cyberowl at bofh.info>
#  Windows Version      : 최기수 <choiks at nuri.net>
#
#  서버및 회선 제공     : http://www.adwars.com
#  Special Thanks       : 권순선 <http://www.kldp.org>
#                       : 임은재 <eunjea at kldp.org>
#                       : 차경묵 <dimanche at dimanche.co.kr>
#                       : 방창현 <winchild at kldp.org>
#
#################################################################################
#
#                              Quick Installation in JSBoard 2.0 v0.4
#
#################################################################################


작성 : 김정균 <http://www.oops.org>
일시 : 2003.12.03

이 문서는 JSBoard 2.0  version 의 설치를 위해 제공을 한다. 이 문서로 인한 피해나
JSBoard의 사용으로 인한 피해에 대해서는 아무런 책임을 질수 없으니 신중 하게 판단
하고 설치를 시도하도록 하기를 바란다.

===================================   주의   ===================================

하나.
JSBoard v2.0 은 PHP4 v4.1.0 이상 버젼에서 정상 작동을 하며, compile 을 할때
configure 시에 --disable-session 옵션을 놓으면 절대 안된다.

하나.
업그레이드 문서는 UPGRADE 문서에서 따로 다루도록 한다.

하나.
Redhat, Debian, FreeBSD 이외의 OS 에서 설치시에는 꼭 jsboard/README.OTHERS.OS 문
서를 읽어보고 설치를 해야한다. Windows 용은 win32버젼의 INSTALL.MANUALY.WIN32 문
서를 참조 하도록 한다.

================================================================================


**** 목 차 ****

  1. 사용환경
    1-1. MySQL 함수 test
    1-2. web server 설정
    1-3. php.ini 의 설정
    1-4. shell 확인 작업 (SunOS 또는 Solaris 지원)
  2. JSBoard 설치
    2-1. MySQL setting
    2-2. 설정 file 셋팅하기
  3. JSBoard 전체 관리자 패스워드 변경
  4. JSBoard 보안
  5. 최신글 출력하기
    5-1. 최신글 보기 구성
    5-2. 최신글 보기 설정
  6. Bug report

***************


1. 사용환경

  Linux(Redhat, Debian) 또는 FreeBSD 가 설치되어 있는 Server (다른 NOS 에서는 어
  떠한 문제가 발생할지 알수가 없음. DIY를 해 보기 바람) 다음 부터 Linux 라고함은
  Redhat Linux 와 Debian Linux 만을 지칭한다.
  
  [ apache ]

    1.3.x 이상
  
  [ MySQL ]

    3.22.30 이상 (RPM 설치 권장 - ftp://mirror.oops.org)에서 받을수 있음

  [ PHP ]

    4.1.0 이상 (RPM 설치 권장 - ftp://mirror.oops.org)에서 받을수 있음

    JSBoard 2.0 은  PHP4-4.1.0 이상 버젼에서 정상 작동을 하며, compile 시에 세션
    기능을 빼면 절대 안된다.

    JSBoard 를 개발하는 환경은 다음과 같다.

    PHP 4.1 기준

    ./configure --prefix=/usr \  
                --with-apxs=/usr/sbin/apxs \  
                --with-config-file-path=/usr/lib/php \
                --disable-debug \
                --with-regex=php \
                --with-mod_charset \
                --with-gd=shared \
                --with-mysql=shared \
                --with-ttf \
                --enable-sigchild \
                --enable-socket \
                --enable-gd-native-ttf \
                --enable-safe-mode \
                --enable-inline-optimization \
                --enable-magic-quotes \
                --enable-mailparse \
                --enable-track-vars \
                --enable-debugger \
                --enable-mbstring \
                --enable-mbstr-enc-trans \
                --enable-mbregex \
                --enable-sysvsem \
                --enable-sysvshm

    PHP 4.3.3 기준

    ./configure --prefix=/usr \
                --with-apxs=/usr/sbin/apxs \
                --with-config-file-path=/usr/lib/php \
                --disable-debug \
                --with-exec-dir=/usr/bin \
                --with-regex=php \
                --with-mod_charset \
                --with-gd=shared \
                --enable-gd-native-ttf \
                --with-jpeg-dir=/usr/lib \
                --with-png-dir=/usr/lib \
                --with-freetype-dir=/usr/lib \
                --with-mysql=shared \
                --enable-mbstring=shared,all \
                --enable-mbregex \
                --enable-sigchild \
                --enable-safe-mode \
                --enable-inline-optimization \
                --enable-magic-quotes \
                --enable-track-vars \
                --enable-debugger \
                --enable-sysvsem \
                --enable-sysvshm

  * 체크 사항 *

  서버의 php가 MySQL 함수가 지원되는지 그리고 php.ini 의 값을 확인한다.

  1-1. MySQL 함수 test

    info.php 라는 file을 아래와 같은 내용으로 생성한다.

    <?php
    phpinfo();
    ?>

    그리고 웹상에서 호출을 했을 경우 MySQL에 대한정보가 있는지 확인한다. 단 주의
    할것은 MySQL의 정보가 있더라도 php 설치시에 mysql 의 경로를 지정해 준것과 실
    제 MySQL 의 경로가 틀릴 경우에는 접속 에러가 발생할수 있다. 가장 대표적인 경
    우가 PHP는 rpm으로 설치를 하고 MySQL은 source compile을 했을 경우이다. PHP를
    rpm 으로 설치를 할경우에는 거의 대부분이 /usr/lib/mysql 에 위치하는 경우이기
    때문이다.

    위의 정보가 존재를 하는데도 불구하고 에러가 발생한다면 일단 아래의 명령을 이
    용하여 mysql의 socket file의 위치를 알아낸다.

    [oops@oops include]$ mysql_config --socket
    /var/lib/mysql/mysql.sock
    [oops@oops include]$

    다음 위의 소켓 file의 경로를 이용하여 다음과 같이 file을 만든다.

    <?
    $mcheck = mysql_connect(":/var/lib/mysql/mysql.sock","root","$passwd");

    if ($mcheck) echo "MySQL 접속에 성공했습니다.";
    else echo "MySQL 접속에 실패를 했습니다.";
    ?>

    라는 code를 만들어서 웹상에서 mysql에 접속을 하여 위의 에러 메세지중 어느 것
    이 나오는지를 확인해 보도록 한다.

    일단 위의 접속이 되지 않으면 shell 상에서

    shell> mysql -u root -p

    명령으로 접근이 가능한지를 테스트 한다. 만약 DB서버가 외부의 서버일 경우에는

    shell> mysql -u root -p -h DB_server_address

    로 접근이 가능한지 테스트를 하고난 다음 위의 코드에서 socket file경로 부분을
    DB 서버의 주소로 변경해서 테스트를 하면 된다.

  1-2. web server 설정

    jsboard 의 index file 은 index.php 이다 그러므로 httpd.conf 에서
    DirectoryIndex 지시자에 index.php 가 지정이 되어 있어야 한다.

    DirectoryIndex index.php index.html index.htm index.jsp ...

  1-3. php.ini 의 설정

    JSBoard 를 운영하기 위해서는 우선 php.ini 의 short_open_tag = On 설정이 있어
    야 한다. 일부 배포본에서 short_open_tag = Off 로 되어 있는 경우가 있는데, 이
    경우 정상 작동을 하지 않는다.

    또한 글쓰기를 할때 ' 또는 " 문자가 제대로 입력이 안되고 에러가나는 경우가 존
    재한다. 이는 php.ini 에서

    magic_quotes_gpc = ON
    magic_quotes_runtime = OFF
    magic_quotes_sybase = OFF

    값들이 제대로 지정이 되어 있는지 확인을 해야 한다. 위의 값으로 맞추어 놓으면
    된다.

    또한 upload 를 할때 2M 이상 되지 않는 경우가 존재한다. 이 경우를 대비하기 위
    해서 

    post 값으로 넘어온 data 의 용량 upload_max_filesize 보다 5M 정도 크게 잡아준
    다.
    post_max_size       = 8M

    php 가 실행될 시간(초단위)
    max_execution_time  = 30

    upload 파일 최대 크기
    upload_max_filesize = 2M

    의 값들을 적절하게 지정해 주어야 한다.

  1-4. shell 확인 작업 (SunOS 또는 Solaris 지원)

    SunOS 와 Solaris 에서는 설치 전,  INSTALLER/script 에 존재하는 스크립트의 제
    일 첫 라인을 다음과 같이 수정을 한다.

    각 스크립트의 첫라인인

    #!/bin/sh

    를 아래의 2 줄로 변경한다.

    #!/bin/ksh
    PATH=/usr/ucb:/usr/xpg4/bin:/usr/bin:/usr/sbin


2. JSBoard 설치

    JSBoard는 웹상에서 관리를 하도록 되어 있기 때문에 웹서버가 작동하는 nobody의
    권한으로 쓰기권한을 가지고 있어야만 한다는 것을 명심해야 한다. 즉 permission
    설정에 주의를 기해야 한다는 것이다! (꼭 nobody 라는 보장은 없다. 이는 apache
    의 설정 파일인 httpd.conf 에서의 Group지시자의 값에 따라 달라진다. 확인을 해
    보도록 한다.)

  2-1 MySQL setting

    MySQL의 처음 셋팅 하는 사람을 기준으로 설명을 한다. 이미 셋팅이 되어 있는 사
    람들은 적당히 보고선 자신이 이미 되어 있는 부분은 뛰어 넘도록 한다.

    계정 사용자들의 경우에는 이 과정을 생략하며, 서버 관리자에게 MySQL 의 계정과
    Database만 생성해 달라고 요청을 하면된다. 즉 DB username,DB name,DB password
    를 알려 달라고 해야 한다.


    . 일단 MySQL을 설치를 하도록 한다. MySQL은 RPM 패키지로도 구할수 있다.

      ftp://mirror.opos.org/pub/Linux/Redhat/RPMS
      ftp://linux.sarang.net/pub/MySQL

      linux 배포본에서 제공하는 php RPM 을 사용하는 사람들의 경우에는 php 를 rpm
      packaging할때 mysql의 경로가 어디로 지정을 했는냐에 따라 달라질수 있으므로
      될수 있으면 A+P+M은 같은 곳에서 패키징 한것을 사용한 것이 좋다.

      source compile 의 경우에는 방법을 생략한다.

    . 설치를 마쳤으면 root계정의 패스워드를 지정한다.

      [root@home /public_html]# mysql mysql 

      Reading table information for completion of table and column names You can
      turn off this feature to get a quicker startup with -A 

      Welcome to the MySQL monitor. Commands end with; or \g. 
      Your MySQL connection id is 1961 to server version: 3.22.32-log 

      Type 'help' for help. 
      mysql> use mysql;
      mysql> update user set password = password('루트패스워드')
           > where user = 'root';
      Query OK, 1 row affected (0.00 sec) 

      mysql> flush privileges;
      Query OK, 0 rows affected (0.00 sec)

      root password 를 지정한 후에 JSBoard 에서 사용할 database 와 사용자 설정을
      하도록 한다. 등록을 하려는 

      USER이름을		"사용자", 
      DB이름을			"디비",
      패스워드를		"패스워드" 

      로 가정을 한다. 적절히 대입을 해 줘라. 단 중요한 것은 이것들을 한글로 하지
      는 마라. 먼일이 벌어지기를 기대한다면 한글로 해도 상관이 없다. 여기서는 단
      지 보기 쉽게 하기 위해서 한글로 하는 것 뿐이다.

      mysql> CREATE database 디비;
      Query OK, 0 rows affected (0.00 sec)

      mysql> GRANT all privileges on 디비.* TO 사용자@localhost
           > IDENTIFIED BY '패스워드';
      Query OK, 0 rows affected (0.00 sec)

      mysql> quit
      Bye

      이미 설정이 되어 있는 사람들은 이 단계는 그냥 건너 뛰면 된다.

  2-2 설정 file 셋팅하기

    먼저 다운로드 받은 file의 압축을 설치를 원하는 디렉토리에서 압축을 풀도록 한
    다.

    $ tar xvfpz jsboard-version.tar.gz

    압축을 풀면 jsboard-version 이라는 디렉토리가 생성이 된다.

    jsboard/INSTALLER/SQL 로 이동을 하여 다음 명령을 실행을 하여 jsboard 에서 사
    용을 할 table 구조체를 만들도록 한다. 위에서 등록한 MySQL 정보들을 알아야 한
    다.

    $ cd jsboard-version/INSTALLER/SQL
    $ mysql -u 사용자 -p 디비 < board-$ostype.sql
    Enter password: 패스워드

    $ mysql -u 사용자 -p 디비 < userdb-$ostype.sql
    Enter password: 패스워드

    table 구조체를 만들었으면, 다음 설정 file 들을 위치 시키고 그 file 들의 퍼미
    션을 조정하도록 한다. jsboard/INSTALLER/script 에서 root 의 권한을 가지고 설
    치를 할수 있다면 root 를 실행하도록 한다.

      $ ./root
      ########################################################
      # JSBoard Config File Installer v2.0                   #
      # Scripted By JoungKyun Kim < http://www.oops.org >    #
      ########################################################

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

      ########################################################
      ## 시스템 정보
      ########################################################
      #
      # 시스템 언어               : 한국어
      # 시스템 타입               : Linux
      # 아파치 유저권한           : nobody
      # 아파치 그룹권한           : nobody
      #
      ########################################################


      위의 정보가 틀리면 N 을 선택해서 재조정 해 주십시오.
      위의 정보가 맞습니까? [Y/N](default Y) :


    위에서 아파치 유저권한 과 아파치 그룹권한이 맞는지를 확인을 해야 한다.
    이 값들은 httpd.conf 의 USER, GROUP 지시자의 값과 동일해야 한다. 같으
    면 y 를 틀리면 n 을 선택하도록 한다. n 을 선택하면 다음의 과정을 거친
    다.

      1. Webserver user configuration
      httpd.conf 의 User 지시자의 값을 적어 주십시오 : apache

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

      설정 완료!!!
      $

    보통 FreeBSD 는 nobody 일 것이며 Debian 은 www-data, RedHat7 은 apache 일 경
    우가 많다.



    계정 사용자의 경우에는 account 를 실행하도록 한다.

      $ ./account
      ########################################################
      # JSBoard Config File Installer v2.0                   #
      # Scripted By JoungKyun Kim < http://www.oops.org >    #
      ########################################################

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

      config/global.php config/spam_list.txt file 의 group 소유권이 nobody
      에게 있어야 합니다. 만약 위의 파일들의 그룹 소유권을 변경할 수 없다
      면 permission 을 606으로 맞춰 주십시오

    account 를 실행 하면 다음과 같이 나온다.  위의 경우는 한글을 사용할수 있다고
    선택한 경우이다. 없다면 영문 메세지로 위의 내용이 나오게된다. 위의 내용은 db
    의 password를 가지고 있는 file을 보호하기 위한 것을 설명한다. 즉 다른 유저가
    db 의 패스워드를 볼수 없도록 하기 위한 것으로 이 부분은 root(서버 관리자) 가
    해 주어야 할 부분이다. 만약 이것이 불가능 하다면 이 파일들의 권한을 606 으로
    설정을 하라는 의미이다. 즉
    
    jsbaord/config/global.php,
    jsboard/config/spma_list.php,
    
    에 대한 group 소유권을 nobody 로 지정해 달라고 해야 한다 (Debian 사용자 라면
    www-data로 해야 할것이고 다른 OS는 모르겠다. httpd.conf 의 Group 지시자에 설
    정되어 있는 값을 확인을 해서 해 달라고 한다) 즉 

    $ chgrp nobody jsboard/config/global.php (root가 실행해야 하는 명령)
    $ chgrp nobody jsboard/config/spam_list.txt (root가 실행해야 하는 명령)

    명령을 실행해 달라고 해야 한다. 이를 시행하면 아래와 같이 소유권을 가지게 된
    다. 이것은 account 를 실행한 후에 행할 일들이다. (Debian의 경우에는 nobody
    가 아니라 www-data가 되어야 한다. RH 7.x 의 경우에는 apache 이다.)

    -rw-rw----    accountname    nobody     config/global.php
    -rw-rw----    accountname    nobody     config/spam_list.txt

    만약 root 가 이를 응하지 않거나 또는 불성실한 root 라면 다음과 같이

    $ chmod 606 config/global.php
    $ chmod 606 config/spam_list.txt

    을 실행하고, 퍼미션은 다음과 같이 된다.

    -rw----rw-    accountname    accountname    config/global.php
    -rw----rw-    accountname    accountname    config/spam_list.txt

    하지만 이렇게 했을 경우 운영은 가능하나 보안상 좋지는 않다.

    그리고 주의 할것은 account user 의 권한으로 설치 시에는 보안의 문제성이 대두
    될수 있으니 home directory의 권한을 꼭 711로 해야한다.

    위의 두 script file은 간단하게 mv, chown, chmod 등의 shell 명령어로 이루어져
    있으니 file 을 편집기로 열어서 보면 어느 곳에 어떠한 소유권과 권한 으로 설정
    file 들이 위치해야 하는지 쉽게 파악할수 있을 것이다.

    위의 명령을 실행을 하면 설정 file들이 각각의 위치로 자리를 잡게 된다.

    다음 jsboard/config/ 로 이동을 하여 global.php 에서 DB의 정보와 몇가지 기본정
    보들을 수정을 한다. global.php 의 설정에 대해서는 README.CONFIG 파일에서 자세
    하게 설명을 한다.

    ############################################################################
    #  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 서버가 외부에 존재를 할 경우에는
    ":/var/lib/mysql/mysql.sock" 부분을 DB 서버의 ip address 로 대체를 하면 될것
    이다. 그리고 mysql을 source compile한 사람들도 mysql.sock file의 경로를 적당
    히 수정해 주면 된다.

    socket file 의 경로는 "mysql_config --socket" 으로 알수가 있다.


    ##############################################################################
    #  BASIC Configuration
    ##############################################################################
    .........

    # web path of installed jsboard
    $board[path]     = "http://domain.com/jsboard/";

    $board[path] 의 값은 jsboard가 설치 되어 있는 웹 경로를 지정해 주면 된다. 제
    일 마지막은 / 로 막혀 있어야 한다.


    ##############################################################################
    #  Anti Spam Configuration
    ##############################################################################
    $board[antispam] = "@SPAM1@:@SPAM2@:@SPAM3@";

    이 설정은 스팸 등록기의 스팸등록을 막기 위한 설정이다. 수작업으로 올리는 광고
    글들은 막을 수 는 없지만, 스팸 등록기를 이용한 무차별적인 등록은 막을 수가 있
    다. 이 변수의 값은 3개의 필드로 구분이 된다. 즉 a:b:c 와 같이 : 문자로 필드를
    구분을 한다. a 의 자리에는 5자리의 정수가, b 와 c 에는 2 자리의 임의의 정수를
    지정하도록 한다. 예를 들어

    $board[antispam] = "12345:67:89";

    와 같이 지정을 하면 된다. 이 설정이 잘못 되었을 경우 글 등록이 되지를 않는다.
    또한 이 설정으로 인하여 list 나 read 페이지를 거치지 않고 바로 write 페이지에
    서 글을 등록할 수 없게 된다.


    ##############################################################################
    #  login mode Configuration
    ##############################################################################
    # login variation name (This value must be modified as security problem)
    $jsboard         = "login";

    이 값은 jsboard의 login 변수명을 지정한다. 보안상 다른 값으로 변경해 주는 것
    이 좋다. 임의의 알파벳으로 된 한단어 또는 무작위 단어를 지정하면 된다.


    # Don't touch this line.
    $jsboard         = "jsboard".$jsboard;

    이 값은 건드리지 않도록 한다. 이 값은 위에서 지정한값이 다른변수와 충돌이 될
    까봐 방지하기 위한 값이다.

    # location of default page after login
    $print[dpage] = "http://domain.com/jsboard/list.php?table=test";

    이 값은 로그인 후에 위치할 페이지를 지정하도록 한다.


    ##############################################################################
    #  Theme Configuration
    ##############################################################################
    # Theme Name
    $print[theme]    = "@THEME@";

    이 값은 영문 페이지로 운영하려면 EN-default 를 지정하고 한글 페이지로 운영하
    려면 KO-default 로 지정을 하도록 한다.


    이상의 값들은 기본적으로 수정이 되어 져야 운영이 가능하다. 그 외에는 JSBoard
    의 README.OPERATE 에 관한 문서를 읽어 보도록 한다.

3. JSBoard 전체 관리자 패스워드 변경

  JSBoard 에는 관리자 기능이 존재를 한다.

  설치가 완료 되었다면 이제 웹브라우져에서 접속을 해 보도록 한다. 우선 전체 설정
  부터 살펴 보도록 한다.

  http://domain.com/jsboard/login.php?type=admin

  으로 접속을 하도록 한다. JSBoard의 관리자의 기본 ID 와 패스워드는 초기값으로는
  admin 과 "0000" 으로 되어 있으니 이 ID 와 패스워드로 접속을 하도록 한다. 가끔
  이렇게 접근을 할 경우 IE 의 경우

  "http://domain.com/jsboard/admin/admin.php 인터넷 사이트를 열 수 없습니다.
   지정된 파일을 찾을 수 없습니다.

  라는 메세지를 보이면 접근이 안될때가 있다. 이 경우는 당황하지 말고 리로드를 하
  면 접근이 가능하다. 이 문제가 필자의 PC의 문제인지 IE 의 문제 인지는 아직 밝혀
  진바가 없다.

  OOPS Administration Center v4.0 에서 달라진 기능은 일단 종전에 JSBoard 에 비해
  사용자 관리 툴이 추가 되어졌다. 이는 JSBoard 2.0 버젼 부터 지원하는 login 기능
  을 지원하기 위해서 이다. 사용자 관리기능으로 들어가서 일단 admin 의 패스워드를
  변경하도록 한다. 유저관리 기능에서는 이름, email, url, password 만 변경이 가능
  하다. id 의 경우에는 db 에서 직접 변경을 해야한다. 또한 전체관리자는 삭제가 불
  가능 하다.


4. JSBoard 보안

  보통 CGI방식을 통한 upload에 관련하여 보안문제가 많이 발생을 하고 있다. 하지만
  단순히 CGI 의 코드만 의존 하여 보안 문제를 방지 한다는 것은 무리라고 생각이 되
  어 apache의 설정 file 에서 원천적으로 업로드 file 에 대해서 실행이 되지 않도록
  하는 설정을 적용시켜 보았다. 현재 필자의 개인 서버와 kldp server에서 적용이 되
  어 있으며 특히 호스팅서버와 같이 여러 계정들이 사용을 하는 경우에 JSBoard를 사
  용할수도 있기 때문에 이 셋팅을 해 놓는 것을 권장 한다.

  설정은 다음과 같이 할수 있다.

  일단 우선 1-3 에서 언급을 했듯이 .ph 파일을 .php 로 인식 하도록 하여 .ph 로 접
  근할 경우 해당 코드를 뿌려주지 않도록 httpd.conf 에서

  AddType application/x-httpd-php .php .php3 .ph

  의 설정을 해 줘야 한다.  그리고 아래와 같이 각 jsboard 에서 사용하는 data 디렉
  토리에서는 php 가 구동이 되지 않도록 해 주도록 한다.

  <DirectoryMatch "^/.*/jsboard/data">
    AddType application/x-httpd-php3-source .phps .php .ph .php3 .cgi .sh .pl .html .htm .shtml .vbs .ins
    AddType application/x-httpd-php-source .phps .php .ph .php3 .cgi .sh .pl .html .htm .shtml .vbs .ins

    ErrorDocument 403 http://domain.com/ErrorMSG/error_msg.php?l=ko&c=403

    <Files ~ ".*\.ph$">
      Order allow,deny
      Deny from all
    </Files>
  </DirectoryMatch>

  이 설정의 의미는 jsboard/data 라는 디렉토리 아래에 있는 어떠한 경로의 data라는
  이름의 디렉토리에서는 .phps .php .ph .php3 .cgi .sh .pl .html .htm .shtml .vbs
  .ins 의 확장자를 가지고 있으면 source를 출력하라는 의미이며 주의 할것은 여기에
  패스워드 같은 것이 들어가 있는 source를 올려 놓으면 안된다는 주의해야 한다. 위
  의 경로는 게시판 디렉토리 이름을 어떻게 하느냐에 따라 수정을 해 줘야 한다.

  또한 data 라는 이름의 디렉토리 아래로 .ph로 직접 접근할 경우에는
  http://domain.com/ErrorMSG/error_msg.php?l=ko&c=403 페이지를 출력 하라는
  의미이다.

  이 설정은 root 의 권한만 가지고 있으면 누구나 다 설정을 해 주는 것이 좋으며 만
  약 계정 유저들이라고 해도 서버 관리자에게 이 설정을 해 달라고 하는것이 좋다. 이
  설정을 안해서 좋을것이 하나도 없을테니 아마 다 해줄 것이다. :-)

  새해에는 좀더 안전한 서버 운영이 되기를 바라면서.. 그럼..


5. 최신글 출력하기

  5-1. 최신글 보기 구성

   JSBoard의 최신글 목록을 출력하는 기능이다. 이 기능은 include/prelist.php 에 의
   해 구동이 되며 어느 file에나 삽입을 하여 사용을 할 수가 있다. (단 php 가 구동
   될 수 있는 파일이어야 한다.)

  5-2. 최신글 보기 설정

   일단 먼저 jsboard/include/prelist.php에서 $prlist[path] 와 $prlist[wpath] 변수
   값을 설정을 해야 한다. $prlist[path] 는 JSBoard 가 설치 되어 있는 절대 경로를
   적어주며, $prlist[wpath] 는 JSBoard 가 출력되는 웹경로를 적어 줘야 한다. 주의
   할것은 마지막에 /는 적지 않도록 한다.

   예)
   $prlist[path] = "/home/httpd/html/PHP/jsboard";
   $prlist[wpath] = "http://domain.com/PHP/jsboard";
   
   일단 사용방법을 설명하자면 우선 최신글을 보여줄 page 의 <BODY> tag 바로 아래에
   다음과 같은 코드를 삽입한다. (중요한 것은 이 기능을 적용시킬 file 은 php 가 구
   동이 될 수 있는 file 이어야 한다.  확장자가 .php3 에서만 php 를 인식할 수 있을
   경우에는 .php3 file 에서만 이 기능을 사용할수 있다.  그리고 prelist.php 를 불러
   들이는 위치는 꼭 <body> 와 </body> 태그 사이어야 한다는 것이 아주 중요하다.)

   <? include "절대경로/prelist.php"; ?>

   다음 리스트 출력을 원하는 부분에 다음과 같은 함수를 적어 주도록 한다.

   <? prelist("a","b","c"); ?>

   prelist() 함수의 값들에 대해서는 아래를 참고하라.

   a 테이블 이름(게시판 이름)
   b 글 리스트 수
   c 출력글자수

   만약 여러개의 게시판을 한 페이지에서 출력 하고 싶다면 위의 코드의 값만 적당히
   변경 시켜서 여러번 적어 주면 된다.

   예)

   test 게시판 3개 미리보기<br>
   <? prelist("test",3,30); ?>

   <p>
   test1 게시판 5개 미리보기<br>
   <? prelist("test1",5,30); ?>

   일단, 위와 같이 출력을하면 현재로서는 아무런 디자인없이 제목만 한 줄씩 출력하
   게 된다. 원하는 디자인을 구성하고 싶다면 prlist() 함수를 호출하기 전에
   $prlistTemplate 라는 변수에 원하는 디자인을 정의하면 된다.

   간단하게 예를 들어 보도록 하겠다.

   예>

   <table>
   <?
   $prlistTemplate = "<tr>\n".
                     "<td>P_SUBJECT_</td>\n".
                     "<td>P_LNAME_</td>\n".
                     "<td>P_DATE_</td>\n".
                     "<td>P_REFER_</td>\n".
                     "</tr>\n";
   prelist(......)
   ?>
   </table>

   과 같이 할 수 있다.

   prlist 에서 출력을 할 수 있는 원형은 다음과 같다.

   P_SUBJECT_    =>  제목을 치환
   P_NAME_       =>  이름을 치환
   P_EMAIL_      =>  이메일을 치환
   P_DATE_       =>  글 등록시간을 치환
   P_REFER_      =>  조회수를 치환
   P_LNAME_      =>  이메일이 있을 경우 이메일 링크가 된 이름을 치환

   만약 제목 링크에 target 이나 onClick 같은 것을 넣고 싶다면 $prlistTemplate
   변수 앞에 $prlistOpt 변수를 아래와 같이 지정해 주면 된다.

   $prlistOpt = "TARGET=_blnak";
   또는
   $prlistOpt = "onClick(...)";

6. Bug report

  버그를 발견할 경우에는 http://jsboard.kldp.org/bbs/list.php?table=bbs_upgrade
  에 리포팅을 해 주면 감사하겠다

