그누보드5 게시판 엑셀 다운로드 가이드
그누보드5(Gnuboard5)를 운영하다 보면 고객 문의 내역, 이벤트 신청 접수자 명단, 설문 데이터, 게시글 목록을 엑셀(Excel) 스프레드시트로 일괄 추출하여 보관하거나 보고해야 할 때가 많습니다. 게시판 스킨에 관리자 전용 [엑셀 다운로드] 버튼을 추가하고 클릭 시 한글 깨짐 없이 UTF-8 엑셀 파일로 바로 내려받는 실전 PHP 소스 코드와 적용법을 정리했습니다.
그누보드 5.3 ~ 5.5 완벽 호환 | 관리자 보안 체크 적용 | 한글 인코딩 깨짐 방지 처리
엑셀 일괄 다운로드 구현 2단계
1단계: list.skin.php 버튼 추가
사용 중인 게시판 스킨 디렉토리(/skin/board/{스킨명}/list.skin.php)의 관리자 버튼 영역에 아래 코드를 추가합니다:
<a href="<?php echo $board_skin_url; ?>/excel.php?bo_table=<?php echo $bo_table; ?>" class="btn btn-success">
<i class="fa fa-file-excel-o"></i> 엑셀 다운로드
</a>
<?php } ?>
2단계: excel.php 스크립트 작성
동일한 스킨 디렉토리 안에 excel.php 파일을 생성하고 아래 PHP 코드를 저장합니다:
include_once('./_common.php');
// 1. 관리자 권한 확인 (비관리자 무단 다운로드 차단)
if (!$is_admin) { alert('관리자만 다운로드 가능합니다.'); }
// 2. 엑셀 파일 헤더 설정 (UTF-8 인코딩)
$file_name = "board_" . $bo_table . "_" . date("Ymd") . ".xls";
header("Content-type: application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: attachment; filename={$file_name}");
header("Content-Description: PHP5 Generated Data");
// 3. 한글 깨짐 방지 UTF-8 BOM 헤더 출력
echo "\xEF\xBB\xBF";
// 4. DB 데이터 쿼리 및 테이블 출력
$sql = "SELECT * FROM {$write_table} WHERE wr_is_comment = 0 ORDER BY wr_id DESC";
$res = sql_query($sql);
?>
<table border="1">
<tr>
<th>번호</th><th>제목</th><th>작성자</th><th>작성일</th><th>조회수</th>
</tr>
<?php while($row = sql_fetch_array($res)) { ?>
<tr>
<td><?php echo $row['wr_id']; ?></td>
<td><?php echo htmlspecialchars($row['wr_subject']); ?></td>
<td><?php echo htmlspecialchars($row['wr_name']); ?></td>
<td><?php echo $row['wr_datetime']; ?></td>
<td><?php echo $row['wr_hit']; ?></td>
</tr>
<?php } ?>
</table>
자주 묻는 질문 (FAQ)
Q. 엑셀을 열었을 때 한글이 외계어로 깨져 나오는 이유는 무엇인가요?
마이크로소프트 엑셀(MS Excel)은 기본적으로 ANSI/CP949 인코딩을 우선 인식합니다. 따라서 UTF-8 파일의 최상단에 BOM(Byte Order Mark, ) 바이트를 출력해 주어야 엑셀이 UTF-8 파일임을 인지하고 한글을 정상 렌더링합니다.
Q. 일반 회원이 excel.php URL을 직접 입력해 다운받을 수 있나요?
코드 상단에 if (!$is_admin) { alert('관리자만 다운로드 가능합니다.'); } 권한 검증문이 들어가 있으므로, 일반 비회원이나 일반 회원이 URL로 직접 접근하더라도 철저하게 접근이 차단됩니다.
Q. 게시글 본문(wr_content)도 엑셀에 포함할 수 있나요?
네, <td><?php echo strip_tags($row['wr_content']); ?></td>와 같이 HTML 태그를 제거하는 strip_tags() 함수를 사용하여 엑셀 열에 추가하시면 깔끔하게 본문 텍스트가 저장됩니다.