<?php
// 공통 설정 파일 불러오기 (DB 연결, 상수 정의 등)
include_once(dirname(__FILE__). "/_common.php");
// 사이트 기본 URL
$SITE_URL = G5_URL;
// sitemap에 포함할 정적 경로 배열
$staticPaths = ['/', '/bbs/board.php', '/bbs/faq.php'];
// 현재 시간 (ISO 8601 형식)
$now = date('c');
// XML 헤더 및 캐시 설정
header('Content-type: text/xml; charset=utf-8');
header('Cache-Control: public, max-age=3600');
header('Pragma: public');
// XML 시작 부분 작성
$xml_code = '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
$xml_code .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
// ----------------------
// 1. 정적 경로 추가
// ----------------------
foreach ($staticPaths as $path) {
// 루트('/')는 우선순위 1.0, 나머지는 0.7
$priority = ($path === '/') ? '1.0' : '0.7';
// 각 URL 태그 작성
$xml_code .= " <url>" . PHP_EOL;
$xml_code .= " <loc>" . htmlspecialchars($SITE_URL . $path) . "</loc>" . PHP_EOL;
$xml_code .= " <lastmod>{$now}</lastmod>" . PHP_EOL;
$xml_code .= " <changefreq>daily</changefreq>" . PHP_EOL;
$xml_code .= " <priority>{$priority}</priority>" . PHP_EOL;
$xml_code .= " </url>" . PHP_EOL;
}
// ----------------------
// 2. 게시판 목록 추가
// ----------------------
$sql = "SELECT bo_table FROM {$g5['board_table']}";
$result = sql_query($sql);
while ($board = sql_fetch_array($result)) {
$xml_code .= " <url>" . PHP_EOL;
$xml_code .= " <loc>" . htmlspecialchars($SITE_URL . '/bbs/board.php?bo_table=' . $board['bo_table']) . "</loc>" . PHP_EOL;
$xml_code .= " <lastmod>{$now}</lastmod>" . PHP_EOL;
$xml_code .= " <changefreq>daily</changefreq>" . PHP_EOL;
$xml_code .= " <priority>0.8</priority>" . PHP_EOL;
$xml_code .= " </url>" . PHP_EOL;
}
// ----------------------
// 3. 게시글 추가 (최근 5000개)
// ----------------------
$sql = "SELECT bo_table FROM {$g5['board_table']}";
$result = sql_query($sql);
while ($board = sql_fetch_array($result)) {
$bo_table = $board['bo_table'];
$write_table = $g5['write_prefix'] . $bo_table;
// 게시판 테이블 존재 여부 확인
$table_check = sql_query("SHOW TABLES LIKE '{$write_table}'", false);
if (!sql_num_rows($table_check)) continue;
// 최근 게시글 5000개 가져오기 (댓글 제외)
$post_sql = "SELECT wr_id, wr_datetime
FROM {$write_table}
WHERE wr_is_comment = 0
ORDER BY wr_datetime DESC
LIMIT 5000";
$post_result = sql_query($post_sql, false);
if ($post_result) {
while ($post = sql_fetch_array($post_result)) {
// 게시글 작성일을 ISO 8601 형식으로 변환
$lastMod = $post['wr_datetime'] ? date('c', strtotime($post['wr_datetime'])) : $now;
// 각 게시글 URL 태그 작성
$xml_code .= " <url>" . PHP_EOL;
$xml_code .= " <loc>" . htmlspecialchars("{$SITE_URL}/bbs/board.php?bo_table={$bo_table}&wr_id={$post['wr_id']}") . "</loc>" . PHP_EOL;
$xml_code .= " <lastmod>{$lastMod}</lastmod>" . PHP_EOL;
$xml_code .= " <changefreq>weekly</changefreq>" . PHP_EOL;
$xml_code .= " <priority>0.6</priority>" . PHP_EOL;
$xml_code .= " </url>" . PHP_EOL;
}
}
}
// ----------------------
// 4. 마무리
// ----------------------
$xml_code .= "</urlset>";
// sitemap.xml 파일로 저장
file_put_contents("sitemap.xml", $xml_code);
?>
'PHP Tip' 카테고리의 다른 글
| 오버레이가 있는 반응형 이미지 갤러리(그누보드) (0) | 2025.12.17 |
|---|---|
| 쿠키 값으로 방문자 횟수 표시 (1) | 2025.12.16 |
| 임대 서버 환경에서 트래픽을 줄이고 사이트 성능을 최적화하려면(그누보드) (0) | 2025.12.16 |
| 이미지 src 추출 (0) | 2025.12.14 |
| Apache의 에서 User-Agent 기반으로 특정 봇을 차단하는 방식입니다. (0) | 2025.12.14 |