데이터베이스가 생겻단 말이지
근데
read.php로 들어가면
홈페이지 화면은 뜨는데
화면창에 목록이 떠야되는데 뜨질않네
게시판은 생성했거든
이거 왜 이런걸까?
# 2010/01/01 Ver2.0
#
#============================================================================================================
header("Content-Type: text/html; charset=UTF-8");
#작성용 플래그
setcookie("Cookie", "ON", 0, "/");
#------------------------------------------------------------------------------------------------------------
# 데이터독포함
#------------------------------------------------------------------------------------------------------------
##### SQLite 버젼 #####
define("DBVERSION", "sqlite2:"); #SQLite2
#define("DBVERSION", "sqlite:"); #SQLite3
############################
### 쿠키 읽기 ###
list($Name, $Mail) = explode("<>", (get_magic_quotes_gpc()? stripslashes($_COOKIE["UserInfo"]): $_COOKIE["UserInfo"]));
#이름란
define("NAME", $Name);
#메일란
define("MAIL", $Mail);
### URL 읽기 ###
#게시판 DB, 스레드 번호, 레스오프션
list($dmy, $BBSName, $ThreadNo, $Option) = explode("/", $_SERVER["PATH_INFO"]);
### 상수 설정 ###
#게시판 DB명
define("BBSDBNAME", $BBSName);
#게시판 DB파일에의 패스
define("BBSDB", "./".BBSDBNAME."/".BBSDBNAME);
#스레드 번호
define("THREADNO", $ThreadNo);
#레스오프션
define("OPTION", $Option);
#리퀘스트 된 URI
define("REQUESTURL", $_SERVER["REQUEST_URI"]);
#풋터 링크 용패스(게시판명까지)
define("PATH", $_SERVER[\'_NAME\']."/".BBSDBNAME."/");
#BASE_DIRECTORY(/read.php/BBSDBNAME/)
define("BASEDIR", "http://".$_SERVER["HTTP_HOST"].PATH);
#버젼
define("VERSION", "Threadic BBS.PHP - 2010/01/13 (PHP 5) +SQLite +Apache2");
#상단 메뉴가 저장된 파일
define("MENUFILE", "./menu.txt");
#전체 공지가 저장된 파일
define("PUBNOTICEFILE", "./notice.txt");
#모든 페이지에서 인클루드되는 HEAD가 저장된 파일
define("PUBHEADFILE", "./head.txt");
#모든 페이지에서 인클루드되는 FOOT이 저장된 파일
define("PUBFOOTFILE", "./foot.txt");
### URL 체크 ###
#URL의 끝이 "/"가 아니거나, 중복된 경우,"/" 를 1개로 바꿔 리디렉트
if(preg_match("([^/]$|/{2}$)", REQUESTURL) && OPTION == "") {
$URL = preg_replace("(/*$)", "", REQUESTURL);
header("location: ".$URL."/");
}
#------------------------------------------------------------------------------------------------------------
# 메인 처리
#------------------------------------------------------------------------------------------------------------
#게시판이 존재한다
#echo BBSDB;
if(BBSDB!=".//" && file_exists(BBSDB.".db") && is_file(BBSDB.".db")) {
#레스내 링크 클릭(쿠션)
if(THREADNO == "Cushion") {
PrintCushion();
#스레드 목록
} elseif(THREADNO == "subback") {
PrintThreadList();
#스레드가 지정된 경우
} elseif(THREADNO != "") {
#스레드 존재 확인([0]스레드 정보,[1]>>1 을 취득)
$ResultSource = Query("SELECT * FROM S".THREADNO." LIMIT 0, 2");
#스레드가 있을 때 -> 개별 스레드 표시
if($ResultSource != false) {
PrintThread($ResultSource);
#스레드가 없을 떄 -> 오류 표시
} else {
PrintThreadError();
}
#스레드 지정되어 있지 않을 때/index 표시
} else {
PrintIndex();
}
#존재하지 않는다
} else {
#게시판이 지정되어 있지 않은 경우는 게시판 일람 표시
if(BBSDBNAME == "") {
PrintBBSList();
#지정되어 있지만 발견되지 않은 경우는 오류 표시
} else {
PrintBBSError();
}
}
exit;
#------------------------------------------------------------------------------------------------------------
# 게시판 index 표시 - PrintIndex
# ---------------------------------------
# 인수:없음
# 반환값:없음
#------------------------------------------------------------------------------------------------------------
function PrintIndex() {
#게시판 설정 정보 취득
$BBS = getBBSSetting();
#스레드 목록 취득
$SQL = "SELECT ThreadNo, ThreadName, ResCount, State FROM ThreadList ORDER BY Time DESC LIMIT 0, ".$BBS["S_INDEXTHREAD_LIST"];
$ThreadResult = Query($SQL);
$PageHead = file_get_contents(MENUFILE);
$PubNotice = file_get_contents(PUBNOTICEFILE);
### 공지 정보 ###
#어느 경우 표시
if($BBS["S_NOTICE"] != ""){
#타이틀과 본문을 분할
# list($Title, $Notice) = explode("<>", $BBS["S_NOTICE"]);
$Notice = htmlspecialchars_decode($BBS["S_NOTICE"], ENT_QUOTES);
}
### 전체 공지 정보 ###
if($PubNotice != ""){
#타이틀과 본문을 분할
# list($PubTitle, $PubNotice) = explode("<>", $PubNotice);
# $PubNotice = \'<TABLE border="1" cellspacing="6" cellpadding="3" bgcolor="\'.$BBS["S_COLOR_HEADER"].\'">\'."\\n"
# .\'<TR align="center"><TD width="200">\'.htmlspecialchars_decode($PubTitle, ENT_QUOTES).\'</TD><TD width="800">\'.htmlspecialchars_decode($PubNotice, ENT_QUOTES)."</TD></TR>\\n"
# ."</TABLE><BR>\\n";
$PubNotice = htmlspecialchars_decode($PubNotice, ENT_QUOTES);
}
### 스레드 목록표시 ###
#스레드가 존재한다
if($ThreadResult != false) {
#전스레드 정보독포함
$ThreadData = $ThreadResult -> fetchall(PDO::FETCH_ASSOC);
#전스레드수
$ThreadCnt = count($ThreadData);
for($i = 0; $BBS["S_INDEXTHREAD_LIST"] > $i && $ThreadCnt > $i; $i++) {
#10개목까지는, 동일 페이지내 링크
if($i < 10) {
$ThreadList .= \'<A href="\'.$ThreadData[$i]["ThreadNo"].\'/l50" target="_blank">\'.($i + 1).\':</A><A href="#\'.($i + 1).\'">\'.$ThreadData[$i]["ThreadName"]." (".$ThreadData[$i]["ResCount"].")</a> ";
#11개목 이후는 새로운 윈도우로 열린다
} else {
$ThreadList .= \'<A href="\'.$ThreadData[$i]["ThreadNo"].\'/l50" target="_blank">\'.($i + 1).":".$ThreadData[$i]["ThreadName"]." (".$ThreadData[$i]["ResCount"].")</a> ";
}
}
$ThreadList .= \'<BR><DIV align="right"><A href="subback/"><B><U>스레드 목록은 이쪽</U></B></A></DIV>\';
#존재하지 않는다
} else {
$ThreadList .= \'<DIV align="center"><B>스레드가 없습니다</B></DIV>\';
}
### 스레드 내용 표시 ###
#10개목까지는 지정수까지 레스를 표시
for($i = 0; 10 > $i && $ThreadCnt > $i; $i++) {
#로그 취득 개시 위치(전레스수가 S_INDEXTHREAD_VIEWCNT 미만의 경우는>>1으로부터, 그 이외는 S_INDEXTHREAD_VIEWCNT 건)
$StartLine = (($ThreadData[$i]["ResCount"] - $BBS["S_INDEXTHREAD_VIEWCNT"]) > 0? ($ThreadData[$i]["ResCount"] - $BBS["S_INDEXTHREAD_VIEWCNT"] + 1): 0);
#기입 내용 취득([0]/스레드 정보,[1]/>>1,[2]/S_INDEXTHREAD_VIEWCNT의 수)
$SQL = "SELECT * FROM S".$ThreadData[$i]["ThreadNo"].\' WHERE No = "1" OR No = "정지" OR No >= \'.$StartLine;
$ResResult = Query($SQL);
$ResData = $ResResult -> fetchall(PDO::FETCH_ASSOC);
$ResCount = count($ResData);
$Thread .= \'<TABLE border="1" cellspacing="6" cellpadding="3" bgcolor="\'.$BBS["S_COLOR_THREAD"].\'">\'."\\n"
."<TR>\\n"
.\'<TD width="1000"><DL class="thread"><A NAME="\'.($i + 1).\'"></A>\'."\\n";
if($i<=0){
$Thread .= \'<div align="right"><a href="#menu">■</a><a href="#\'.($ThrCnt>9?10:$ThrCnt).\'">▲</a><a href="#\'.($i+2).\'">▼</a></div>\';
}elseif($i>=9 || $ThrCnt-1==$i){
$Thread .= \'<div align="right"><a href="#menu">■</a><a href="#\'.$i.\'">▲</a><a href="#1">▼</a></div>\';
}else{
$Thread .= \'<div align="right"><a href="#menu">■</a><a href="#\'.$i.\'">▲</a><a href="#\'.($i+2).\'">▼</a></div>\';
}
$Thread .="<B>【".($i + 1).":".$ThreadData[$i]["ResCount"].\'】<FONT SIZE="5" COLOR="#FF0000">\'.$ThreadData[$i]["ThreadName"]."</FONT></B><BR>\\n";
#레스 정보 존재한다
if($ResCount != 1) {
#지정수까지 레스 표시
for($n = 0; ($BBS["S_INDEXTHREAD_VIEWCNT"]) >= $n && $ResCount - 1 > $n; $n++) {
$Thread .= DispRes($ResData[$n], $ResData[$ResCount-1]["No"], $BBS);
}
#존재하지 않는다
} else {
$Thread .= "Error:레스 정보가 없습니다.<BR><BR>\\n";
}
#기입 가부 취득(스레스트·레스수MAX)
$CheckResult = CheckThread($ThreadData[$i]["ThreadNo"], $ThreadData[$i]["State"]);
#기입가능의 경우, 폼등을 표시
if($CheckResult != false) {
$Thread .= "</DL><BLOCKQUOTE>\\n"
.$CheckResult
."\\n";
}
### 스레드 하부 링크 ###
$Thread .= ""
.\'<P><B><A href="\'.$ResData[$ResCount-1]["No"].\'/">전부 읽기</a> \'
.\'<A href="\'.$ResData[$ResCount-1]["No"].\'/l50">최신 50</A> \'
.\'<A href="\'.$ResData[$ResCount-1]["No"].\'/1-100">1-100</A> \'
.\'<A href="#PageTop">판의 톱</A> \'
.\'<A href="\'.$PHP_SELF.\'">새로고침</A></B></P>\'
."</BLOCKQUOTE>\\n</TD>\\n</TR>\\n</TABLE><BR>\\n";
}
#index 하부 풋터
if($BBS["S_FOOTER"] != "") {
# $FootData = \'<TABLE border="1" cellspacing="6" cellpadding="3" bgcolor="\'.$BBS["S_COLOR_HEADER"].\'">\'."\\n"
# .\'<TR><TD width="1000">\'.htmlspecialchars_decode($BBS["S_FOOTER"], ENT_QUOTES)."</TD></TR>\\n"
# ."</TABLE><BR>\\n";
$FootData = $BBS["S_FOOTER"];
}
### index 상부
print "<HTML>\\n"
."<HEAD>\\n"
.\'<META http-equiv="Content-Type" content="text/html; charset=UTF-8">\'."\\n"
.\'<META http-equiv="Content-Style-Type" content="text/css">\'."\\n"
.\'<link rel="shortcut icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
.\'<link rel="icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
.\'< type="text/" src="../../js/index.js"></>\'."\\n"
.\'< type="text/" src="../../js/be.js"></>\'."\\n"
.\'< type="text/" src="../../js/flood.js"></>\'."\\n"
."<TITLE>".$BBS["BBSName"]."@".$BBS["BBSSubName"]."</TITLE>\\n"
.\'<BASE href="\'.BASEDIR.\'">\'."\\n"
.\'<link rel="stylesheet" type="text/css" href="../../thread.css">\'."\\n"
.\'<STYLE type="text/css">\'
."<!-- #G { color:".$BBS["S_TEXT_COLOR_NAME"]."; } -->\\n"
."<!-- #kanban { border: none; } -->\\n"
."</STYLE>\\n"
."</HEAD>\\n"
.\'<BODY background="../../\'.BBSDBNAME."/".$BBS["S_BACKGROUND"].\'" bgcolor="\'.$BBS["S_COLOR_INDEX"].\'" text="\'.$BBS["S_TEXT_COLOR_BASE"].\'" link="\'.$BBS["S_TEXT_COLOR_LINK"].\'" vlink="\'.$BBS["S_TEXT_COLOR_VLINK"].\'" alink="\'.$BBS["S_TEXT_COLOR_ALINK"].\'">\'."\\n"
.file_get_contents(PUBHEADFILE)."\\n" //전역 헤더
.\'<A NAME="PageTop"></A>\'."\\n"
# .\'<DIV align="center"><A href="\'.$BBS["S_KANBAN_LINK"].\'"><img src="'.BBSDBNAME."/".$BBS["S_KANBAN"].\'" alt="kanban"></A></DIV>\'."\\n"
.\'<DIV align="center">\'.$PageHead.\'</DIV><BR>\'."\\n"
.\'<TABLE border="0" align="center">\'."\\n"
.\'<TR><TD width="1000" align="center">\'."\\n"
### 헤더
.\'<table border=1 cellspacing=6 cellpadding=3 bgcolor="\'.$BBS["S_COLOR_HEADER"].\'" align=center><tr><td align=center width="1000"><table border=0 cellpadding=0><tr><td nowrap COLSPAN=0 class="thread"><big><b>\'.$BBS["BBSName"]."@".$BBS["BBSSubName"].\'</b></big><br></td><td nowrap width="2%" align=right valign=top><a href="#menu">■</a><a href="#1">▼</a></td></tr><tr><td class="Head">\'.htmlspecialchars_decode($BBS["S_HEADER"], ENT_QUOTES)."\\n"
.\'</td></tr><tr><td nowrap align=right></td></tr></table></td></tr><tr><td><font size=2><Center><A href="../"><FONT SIZE="2">■게시판 일람■</Center></font></td></tr></table><BR>\'."\\n"
### 전체 공지란
.$PubNotice
### 공지 및 광고란
.$Notice
.\'<TABLE border="1" cellspacing="6" cellpadding="3" bgcolor="\'.$BBS["S_COLOR_HEADER"].\'">\'."\\n"
."<TR>\\n"
.\'<TD width="1000" class="DispThread">\'."\\n"
### 스레드 목록
.$ThreadList
."\\n</TD>"
."\\n</TR>\\n</TABLE><BR>\\n"
### 스레드 내용
.$Thread
.\'<FORM METHOD="post" ACTION="../../bbs.php">\'."\\n"
.\'<TABLE border="1" cellspacing="6" cellpadding="3" bgcolor="\'.$BBS["S_COLOR_HEADER"].\'">\'."\\n"
.\'<TR><TD width="1000" align="center"><BR><INPUT TYPE="submit" VALUE="신규 스레드 개설" Style="height: 22px">\'."\\n"
.\'<BR><BR>\'."\\n"
."</TD></TR></TABLE>\\n"
.\'<INPUT TYPE="hidden" NAME="SelProc" VALUE="NEWTHREAD">\'."\\n"
.\'<INPUT TYPE="hidden" Name="SelBBS" VALUE="\'.BBSDBNAME.\'">\'."\\n"
."</FORM><BR>\\n"
### 풋터
.file_get_contents(PUBFOOTFILE)."<BR>\\n" //전역 풋터
.$FootData
."</TD></TR>\\n</TABLE>\\n"
# .\'\'.VERSION."<BR>\\n"
# .\'<DIV align="center"><A href="../../option.php?s=Search">스레드 제목 검색</A></DIV>\'."\\n"
# .\'페이지의 끝입니다...\'."\\n"
."</BODY>\\n</HTML>";
}
#------------------------------------------------------------------------------------------------------------
# 스레드 개별 표시 - PrintThread
# ---------------------------------------
# 인수:결과 세트
# 반환값:없음
#------------------------------------------------------------------------------------------------------------
function PrintThread($ResultSource) {
if(strstr($_SERVER["REQUEST_URI"], "hey"))
{
#인기글을 위한 스레드 열람 수 처리
$Result = Query(\'SELECT AccessCount FROM ThreadList WHERE ThreadID = "\'.THREADNO, "./DB/HotThread");
if(!$Result)
{
Query(\'INSERT INTO ThreadList VALUES ("\'.BBSDBNAME.\'",\'.THREADNO.", 0);", "./DB/HotThread");
$Result = Query(\'SELECT AccessCount FROM ThreadList WHERE ThreadID = "\'.THREADNO.\'"\', "./DB/HotThread");
}
$AccCnt=$Result -> fetchall(PDO::FETCH_ASSOC);
$AccCnt=(int)$AccCnt;
$AccCnt++;
Query(\'UPDATE ThreadList SET AccessCount = \'.$AccCnt.\' WHERE ThreadID = "\'.THREADNO.\'"\', "./DB/HotThread");
}
#레스 표시 건수
$ViewCount = 0;
#스레드 정보 읽기
$ThreadData = $ResultSource -> fetch(PDO::FETCH_ASSOC);
#기입 가부 취득(스레스트·S_RESMAX)
$CheckResult = CheckThread($ThreadData["No"], $ThreadData["Message"]);
if($CheckResult != false) {
$FootData .= $CheckResult;
}
#>>1 읽기
$Result_1 = $ResultSource -> fetch(PDO::FETCH_ASSOC);
#게시판 설정 정보 취득
$BBS = getBBSSetting();
#전레스수취득(스레드 정보행을 제외하다)
$ResCountSource = Query(\'SELECT ResCount FROM ThreadList WHERE ThreadNo = "\'.THREADNO.\'"\');
$ResCount = $ResCountSource -> fetchColumn();
#개시 레스 번호, 종료 레스 번호,>>1 표시 플래그
list($Start, $End, $Flg) = explode("/", getBeforeNext($ResCount));
### 지정 레스 번호가 전레스수를 넘고 있는 or 개시 레스 번호, 종료 레스 번호가 숫자 이외의 경우는>>1만 표시
if($End >= $Start && is_numeric($Start) && is_numeric($End)) {
### 기입 데이터 취득/$Start$End까지
#"LIMIT +++, ---"(은)는, 「+++행목으로부터 ---행만 취득」이므로, $Start와$End의 차이를 요구한다
$ResultSource = Query("SELECT * FROM S".THREADNO." LIMIT ".$Start.", ".($End - $Start + 1));
}
### 스레드 상부
print "<HTML>\\n"
."<HEAD>\\n"
.\'<META http-equiv="Content-Type" content="text/html; charset=UTF-8">\'."\\n"
.\'<META http-equiv="Content-Style-Type" content="text/css">\'."\\n"
.\'<link rel="shortcut icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
.\'<link rel="icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
."<TITLE>".$ThreadData["Name"]."</TITLE>\\n"
.\'<BASE href="\'.BASEDIR.\'">\'."\\n"
.\'<link rel="stylesheet" type="text/css" href="../../thread.css">\'."\\n"
.\'<STYLE type="text/css">\'
."<!-- #G { color:".$BBS["S_TEXT_COLOR_NAME"]."; } -->"
."</STYLE>\\n"
."</HEAD>\\n"
.\'<BODY bgcolor="\'.$BBS["S_COLOR_THREAD"].\'" text="\'.$BBS["S_TEXT_COLOR_BASE"].\'" link="\'.$BBS["S_TEXT_COLOR_LINK"].\'" vlink="\'.$BBS["S_TEXT_COLOR_VLINK"].\'" alink="\'.$BBS["S_TEXT_COLOR_ALINK"].\'">\'."\\n"
.file_get_contents(PUBHEADFILE)."\\n" //전역 헤더
### 헤더 링크
.ThreadHeader($ResCount, $BBS["S_RESMAX"])
.\'<FONT COLOR="\'.$BBS["S_TEXT_COLOR_SUBJECT"].\'" SIZE="4">\'.$ThreadData["Name"]."</FONT><BR>\\n<DL>\\n";
### 레스 표시 ###
#>>1 표시 플래그가 서있고 >>1 데이터가 있다
if($Flg == 1 && $Result_1["No"] != "") {
print DispRes($Result_1, "../".BBSDBNAME."/".THREADNO."/", $BBS);
$ViewCount++;
}
#취득한 레스분만큼 표시
for($i = 0; ($Result = $ResultSource -> fetch(PDO::FETCH_ASSOC)) != false; $i++) {
print DispRes($Result, "../".BBSDBNAME."/".THREADNO."/", $BBS);
}
#레스 표시 건수가 0건
if(($ViewCount + $i) == 0) {
print "Error:레스 정보가 없습니다.";
}
#풋터 링크/기입 폼
print "</DL>\\n"
.ThreadFooter($Start, $End, $BBS)
.$FootData
."<BR>\\n</BODY>\\n</HTML>";
}
#------------------------------------------------------------------------------------------------------------
# 레스 표시용 - DispRes
# ---------------------------------------
# 인수:레스 배열, 링크, 게시판 설정 정보
# 반환값:레스/1행 분
#------------------------------------------------------------------------------------------------------------
function DispRes($Res, $Link, $BBS) {
### 메일란 ###
#입력 있어
if($Res["Mail"] != "") {
$Res["Name"] = \'<A href="mailto:\'.$Res["Mail"].\'">\'.$Res["Name"]."</A>";
#입력 없음
} else {
$Res["Name"] = \'<SPAN ID="G">\'.$Res["Name"]."</SPAN>";
}
### ID ###
if($Res["ID"] != "") {
$Res["ID"] = " ID:".$Res["ID"];
}
### 호스트 ###
if($BBS["S_DISP_HOST"] == "on" && $Res["Host"] != "") {
$Res["Host"] = " HOST:".$Res["Host"];
} else {
$Res["Host"] = "";
}
### 본문 ###
#본문을 개행 태그로 분할
$Log = explode("<BR>", $Res["Message"]);
#초기화
$Res["Message"] = "";
#스레드 index내에서 본문이 설정행수를 넘고 있으면 설정행수까지 표시
if(THREADNO == "" && count($Log) > $BBS["S_LIMIT_DISP_LINENUM"]) {
$DispCnt = $BBS["S_LIMIT_DISP_LINENUM"];
#설정행수이상은 생략 메세지
$Omission = \'<FONT COLOR="#008000">(생략 되었습니다··모두를 읽으려면<A href="\'.$Link."/".$Res["No"].\'" target="_blank">여기</a>를 눌러 주세요)</FONT>\';
#스레드 개별 표시라면 모두 표시
} else {
$DispCnt = count($Log);
}
#표시하는 분만큼 편집
for($i = 0; $DispCnt > $i; $i++) {
### URL 엥커 작성
#쿠션 사용 한편 다른 사이트 전용의 경우
if($BBS["S_CUSHION"] == "on" && !stristr($Log[$i], $_SERVER[\'HTTP_HOST\'])) {
$Log[$i] = preg_replace("/(https?|ftp)(:\\/\\/[[:alnum:]+$;?.%,!#~*\\/:@&=_-]+)/", \'<A href="\'.PATH."Cushion".\'/$1$2" target="_blank">$1$2</A>\', $Log[$i]);
#자사이트 or 쿠션 무효의 경우
} else {
$Log[$i] = preg_replace("/(https?|ftp)(:\\/\\/[[:alnum:]+$;?.%,!#~*\\/:@&=_-]+)/", \'<A href="$1$2" target="_blank">$1$2</A>\', $Log[$i]);
}
#본문 결합
$Res["Message"] .= $Log[$i]."<BR>";
}
### 레스앵커 작성 ###
#???-???
$Res["Message"] = eregi_replace(">>([0-9]+-[0-9]+)", \'<A href="\'.$Link.\'/\\\\1" target="_blank">>>\\\\1</A>\', $Res["Message"]);
# $Res["Message"] = preg_replace("/>>([1-9][0-9]*-[1-9][0-9]*)/", \'<A href="\'.$Link.\'/$1" target="_blank">>>$1</A>\', $Res["Message"]);
#???-
$Res["Message"] = eregi_replace(">>([0-9]+-)", \'<A href="\'.$Link.\'/\\\\1" target="_blank">>>\\\\1</A>\', $Res["Message"]);
# $Res["Message"] = preg_replace("/>>([1-9][0-9]*-)/", \'<A href="\'.$Link.\'/$1" target="_blank">>>$1</A>\', $Res["Message"]);
#???
$Res["Message"] = eregi_replace(">>([0-9]+)", \'<A href="\'.$Link.\'/\\\\1" target="_blank">>>\\\\1</A>\', $Res["Message"]);
# $Res["Message"] = preg_replace("/>>([1-9][0-9]*)/", \'<A href="\'.$Link.\'/$1" target="_blank">>>$1</A>\', $Res["Message"]);
return "<DT>".$Res["No"]." 이름:".$Res["Name"]." :".$Res["Date"].$Res["ID"].$Res["Host"]."<BR><DD>".$Res["Message"].$Omission."<BR></DD></DT>\\n";
}
#------------------------------------------------------------------------------------------------------------
# 레스수옵션 해석 - getBeforeNext
# ---------------------------------------
# 인수:전레스수
# 반환값:개시 레스차례/종료 레스차례/>>표시 1 플래그
#------------------------------------------------------------------------------------------------------------
function getBeforeNext($AllResCnt) {
### 6번째 이외 모두>>1을 표시한다
#1/지정 없음/모두 표시
if(OPTION == "") {
$BeforeNext = "1/".$AllResCnt."/0";
#2/l??
} elseif(preg_match("/^l([0-9]+)$/", OPTION, $Match)) {
if(($AllResCnt - $Match[1]) <= 0) {
$BeforeNext = "2/".($AllResCnt > 2? $AllResCnt: "2")."/1";
} else {
$BeforeNext = ($AllResCnt - $Match[1] + 1)."/".$AllResCnt."/1";
}
#3/-??
} elseif(preg_match("/^-([0-9]+)$/", OPTION, $Match)) {
$BeforeNext = "2/".$Match[1]."/1";
#4/??-
} elseif(preg_match("/([1-9][0-9]*)-$/", OPTION, $Match)) {
$BeforeNext = (($Match[1] == 1)? ($Match[1] + 1): $Match[1])."/".$AllResCnt."/1";
#5/??-??
} elseif(preg_match("/([1-9][0-9]*)-([1-9][0-9]*)/", OPTION, $Match)) {
$BeforeNext = $Match[1]."/".$Match[2].(($Match[1] == 1)? "/0": "/1");
#6/1레스만 지정 or 존재하지 않는 레스 번호
} elseif(OPTION != 0) {
$BeforeNext = (Integer) OPTION."/".OPTION."/0";
#7/문자열 등
} else {
$BeforeNext = "1/0/1";
}
return $BeforeNext;
}
#------------------------------------------------------------------------------------------------------------
# 개별 스레드용 헤더 - ThreadHeader
# ---------------------------------------
# 인수:전레스수, 레스수MAX
# 반환값:헤더
#------------------------------------------------------------------------------------------------------------
function ThreadHeader($ResCount, $ResMAX) {
return \'<A href="/">홈</A>\'."\\n"
.\'<A href="./">■게시판으로 돌아가기■</A>\'."\\n"
.\'<A href="\'.THREADNO.\'/">전부</A>\'."\\n"
.\'<A href="\'.THREADNO.\'/1-100">1-</A>\'."\\n"
.\'<A href="\'.THREADNO.\'/l50">최신 50</A><BR>\'."\\n"
.CheckResCount($ResCount, $ResMAX)
.\'<hr Style="height:1px; position:relative; top:-.4em;">\'."\\n";
}
#------------------------------------------------------------------------------------------------------------
# 레스수체크 - CheckResCount
# ---------------------------------------
# 인수:전레스수, 레스수MAX
# 반환값:경고 메세지
#------------------------------------------------------------------------------------------------------------
function CheckResCount($ResCount, $ResMAX) {
#RESMAX의 50전/0이라면 1
$Last50 = (($ResMAX - 50) > 0? ($ResMAX - 50): 1);
#RESMAX의 100전/0이라면 1
$Last100 = (($ResMAX - 100) > 0? ($ResMAX - 100): 1);
#RESMAX 이상
if($ResCount >= $ResMAX) {
return \'<TABLE border="0"><TR><TD bgcolor="#FF0000"><FONT COLOR="#FFFFFF">레스수가\'.$ResMAX.\'를 넘고 있습니다.이 스레드에는 쓸 수 없습니다.</FONT></TD></TR></TABLE>\'."\\n";
} elseif($ResCount >= $Last50) {
return \'<TABLE border="0"><TR><TD bgcolor="#FF0000"><FONT COLOR="#FFFFFF">레스수가\'.$Last50.\'를 넘고 있습니다.\'.$ResMAX.\'를 넘는다고 표시할 수 없게 됩니다.</FONT></TD></TR></TABLE>\'."\\n";
} elseif($ResCount >= $Last100) {
return \'<TABLE border="0"><TR><TD bgcolor="#FFFF00"><FONT COLOR="#000000">레스수가\'.$Last100.\'를 넘고 있습니다.\'.$ResMAX.\'를 넘는다고 표시할 수 없게 됩니다.</FONT></TD></TR></TABLE>\'."\\n";
}
}
#------------------------------------------------------------------------------------------------------------
# 개별 스레드용 풋터 - ThreadFooter
# ---------------------------------------
# 인수:개시 위치, 종료 위치, 게시판 설정 정보
# 반환값:풋터
#------------------------------------------------------------------------------------------------------------
function ThreadFooter($Start, $End, $BBS) {
#전 100의 개시치
$Bef100_S = (($Start - 100) <= 0? 1: $Start - 100);
#전 100의 종료치
$Bef100_E = (($Start - 1) <= 0? 1: $Start - 1);
#다음 100의 개시치
$Next100_S = (($End + 1) > $BBS["S_RESMAX"]? $BBS["S_RESMAX"]: $End + 1);
#다음 100의 종료치
$Next100_E = (($End + 100) > $BBS["S_RESMAX"]? $BBS["S_RESMAX"]: $End + 100);
$Message = \'<hr Style="height: 1px">\'."\\n"
.\'<A href="./">게시판으로 돌아가기</A>\'."\\n"
.\'<A href="\'.THREADNO.\'/">전부</A>\'."\\n"
.\'<A href="\'.THREADNO."/".$Bef100_S."-".$Bef100_E.\'">전 100</A>\'."\\n"
.\'<A href="\'.THREADNO."/".$Next100_S."-".$Next100_E.\'">다음 100</A>\'."\\n"
.\'<A href="\'.THREADNO.\'/l50">최신 50</A><BR><BR>\'."\\n";
return $Message;
}
#------------------------------------------------------------------------------------------------------------
# 기입 가부 체크 - CheckThread
# ---------------------------------------
# 인수:전레스수, 스레드 상태
# 반환값:기입 폼 or FALSE
#------------------------------------------------------------------------------------------------------------
function CheckThread($ThreadNo, $ThreadState) {
#스레스트 or 레스수MAX 도달
if($ThreadState == "Over" || $ThreadState == "Stop") {
return false;
}
$WriteForm .= \'<FORM METHOD="post" ACTION="../../bbs.php">\'."\\n"
.\'<INPUT TYPE="submit" VALUE="작성">\'."\\n"
.\'이름: <INPUT TYPE="text" class="Text" NAME="Name" SIZE="25" VALUE="\'.NAME.\'">\'."\\n"
.\' E-mail<FONT SIZE="1"> (생략가능) </FONT>: <INPUT TYPE="text" class="Text" NAME="Mail" SIZE="25" VALUE="\'.MAIL.\'"><BR>\'."\\n"
.\'<TEXTAREA ROWS="9" COLS="100" WRAP="off" NAME="Message"></TEXTAREA>\'."\\n"
.\'<INPUT TYPE="hidden" NAME="SelProc" VALUE="WRITE">\'."\\n"
.\'<INPUT TYPE="hidden" NAME="SelBBS" VALUE="\'.BBSDBNAME.\'">\'."\\n"
.\'<INPUT TYPE="hidden" NAME="ThreadNo" VALUE="\'.$ThreadNo.\'">\'."\\n"
."</FORM>\\n";
return $WriteForm;
}
#------------------------------------------------------------------------------------------------------------
# 레스내 링크 쿠션 - PrintCushion
# ---------------------------------------
# 인수:없음
# 반환값:없음
#------------------------------------------------------------------------------------------------------------
function PrintCushion() {
$URL = preg_match("/(https?|ftp)(:\\/\\/[[:alnum:]+$;?.%,!#~*\\/:@&=_-]+)/", REQUESTURL, $Match);
print "<HTML>\\n"
."<HEAD>\\n"
.\'<META http-equiv="Content-Type" content="text/html; charset=UTF-8">\'."\\n"
.\'<link rel="shortcut icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
.\'<link rel="icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
."<TITLE>다른 사이트로 이동합니다.</TITLE>\\n"
.\'<STYLE type="text/css">\'."\\n"
."<!-- A:hover { color: #808080; background-color: #F4FFFF; } -->\\n"
."</STYLE>\\n"
."<BODY>\\n"
.file_get_contents(PUBHEADFILE)."\\n" //전역 헤더
.\'<B><A href="\'.$Match[0].\'">\'.$Match[0]."</A></B><BR><BR>\\n"
."다른 사이트로 이동합니다. 위의 링크를 클릭해주세요.<BR>"
."<B>링크에 대해서는 어떠한 책임도 지지 않습니다.</B>\\n"
."</BODY>\\n"
."</HTML>";
}
#------------------------------------------------------------------------------------------------------------
# 전스레드 목록표시 - PrintThreadList
# ---------------------------------------
# 인수:없음
# 반환값:없음
#------------------------------------------------------------------------------------------------------------
function PrintThreadList() {
#게시판 설정 정보 읽기
$BBS = getBBSSetting();
#스레드 목록 취득
$SQL = "SELECT ThreadNo, ThreadName, CreateTime, LastWriteTime, CreateUserHost, ResCount FROM ThreadList ORDER BY Time DESC";
$Result = Query($SQL);
$Data = $Result -> fetch(PDO::FETCH_ASSOC);
#스레드가 존재하는 경우
if($Data != "") {
for($i = 1; $Data != false; $i++) {
$List .= \'<TR align="center"><TD>\'.$i.\'</TD><TD class="BBS_List" align="left"><A href="../\'.$Data["ThreadNo"].\'/l50" target="_blank">\'.$Data["ThreadName"].\'</A></TD><TD>\'.preg_replace("/(\\(.*\\))/", "",$Data["CreateTime"]).\'</TD><TD>\'.preg_replace("/(\\(.*\\))/", "",$Data["LastWriteTime"]).\'</TD><TD>\'.$Data["ResCount"].\'</TD></TR>\'."\\n";
$Data = $Result -> fetch(PDO::FETCH_ASSOC);
}
#존재하지 않는 경우
} else {
$List = \'<TR><TD colspan="5" align="center">스레드가 없습니다</TD></TR>\';
}
print "<HTML>\\n"
."<HEAD>\\n"
.\'<META http-equiv="Content-Type" content="text/html; charset=UTF-8">\'."\\n"
.\'<META http-equiv="Content-Style-Type" content="text/css">\'."\\n"
.\'<link rel="shortcut icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
.\'<link rel="icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
.\'<link rel="stylesheet" type="text/css" href="../../../style.css">\'."\\n"
."<TITLE>".$BBS["BBSName"]."@".$BBS["BBSSubName"]."@스레드 목록</TITLE>\\n"
."</HEAD>\\n"
."<BODY><BR><BR>\\n"
.file_get_contents(PUBHEADFILE)."\\n" //전역 헤더
.\'<SPAN class="SubbackLink">\'."\\n"
.\'<TABLE cellspacing="1" cellpadding="0" class="TABLE_FRM" align="center">\'."\\n"
.\'<TBODY class="TD_ALL">\'."\\n"
.\'<TR align="center" class="SubbackLongLink"><TD colspan="5"><A href="../">◇게시판으로 돌아가기◇</A></TD></TR>\'."\\n"
.\'<TR class="TD_Purple18"><TD colspan="5">스레드 목록</TD></TR>\'."\\n"
.\'<TR class="U_Gray_Bold"><TD width="50">No</TD><TD ID="Cell_Margin">스레드명</TD><TD width="160">작성 일시</TD><TD width="160">최종 기입</TD><TD width="60">레스수</TD></TR>\'."\\n"
.$List
.\'<TR align="center" class="SubbackLongLink"><TD colspan="5"><A href="../../../log.php/\'.BBSDBNAME.\'/">◇과거 로그 창고◇</A></TD></TR>\'."\\n"
."</TBODY>\\n"
."</TABLE>\\n"
."</SPAN>\\n"
."</BODY>\\n"
."</HTML>";
}
#------------------------------------------------------------------------------------------------------------
# 스레드 검색 - SearchThread
# ---------------------------------------
# 인수:없음
# 반환값:없음
#------------------------------------------------------------------------------------------------------------
function SearchThread() {
$FileName = "./".BBSDBNAME."/log/".substr(THREADNO, 0, 4)."/".THREADNO.".html";
#과거 로그가 존재하는 경우
if(file_exists($FileName)) {
$Date = substr(VERSION, 15, 4)."/".substr(VERSION, 19, 2)."/".substr(VERSION, 21, 2);
return \'<DL>1 이름:<B><FONT COLOR="green">\'.substr(VERSION, 0, 14)." </FONT></B>:".$Date."<BR>\\n"
."<DD>그런 스레드 없습니다.</DD></DL><BR><BR><BR><BR><BR>\\n"
."<HR>".VERSION.\'<HR><BR>대장! 과거 로그 창고에서, 스레드 <A href="../../\'.$FileName.\'">\'.THREADNO.".html</A> 를 발견했습니다.\\n";
#존재하지 않는 경우는 DAT 제거 확인
} else {
$Result = Query(\'SELECT Count(ThreadNo) FROM PoolList WHERE ThreadNo = "\'.THREADNO.\'"\');
$Count = $Result -> fetchColumn();
if($Count > 0) {
$Date = substr(VERSION, 15, 4)."/".substr(VERSION, 19, 2)."/".substr(VERSION, 21, 2);
return \'<DL>1 이름:<B><FONT COLOR="green">\'.substr(VERSION, 0, 14)." </FONT></B>:".$Date."<BR>\\n"
."<DD>그런 스레드 없습니다.</DD></DL><BR><BR><BR><BR><BR>\\n"
."<HR>".VERSION."<HR><BR>".THREADNO." (은)는 html화를 기다리고 있습니다.<BR>여기는 기다릴 수 밖에 없다···\\n";
}
}
}
#------------------------------------------------------------------------------------------------------------
# 해당 스레드 없음 - PrintThreadError
# ---------------------------------------
# 인수:없음
# 반환값:없음
#------------------------------------------------------------------------------------------------------------
function PrintThreadError() {
$Message = SearchThread();
print "<HTML>\\n"
."<HEAD>\\n"
.\'<META http-equiv="Content-Type" content="text/html; charset=UTF-8">\'."\\n"
.\'<link rel="shortcut icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
.\'<link rel="icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
."<TITLE>스레드를 찾을 수 없습니다.</TITLE>\\n"
.\'<BASE href="\'.BASEDIR.\'">\'."\\n"
."</HEAD>\\n"
.\'<BODY bgcolor="#EFEFEF" TEXT="#000000" LINK="#0000FF" VLINK="#660099" ALINK="#FF0000">\'."\\n"
.file_get_contents(PUBHEADFILE)."\\n" //전역 헤더
.\'<BASEFONT FACE="MS PGothic">\'."\\n"
.\'<A href="/">홈</A>\'."\\n"
.\'<A href="./">■게시판으로 돌아온다■</A><BR>\'."\\n"
.\'<hr Style="height:1px; position:relative; top:-.4em;">\'."\\n"
.\'<FONT COLOR="#FF0000" SIZE="4">\'."스레드를 찾을 수 없습니다.</FONT><BR>\\n"
.$Message
."</BODY>\\n"
."</HTML>";
}
#------------------------------------------------------------------------------------------------------------
# 해당 게시판 없음 - PrintBBSError
# ---------------------------------------
# 인수:없음
# 반환값:없음
#------------------------------------------------------------------------------------------------------------
function PrintBBSError() {
print "<HTML>\\n"
."<HEAD>\\n"
.\'<META http-equiv="Content-Type" content="text/html; charset=UTF-8">\'."\\n"
.\'<link rel="shortcut icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
.\'<link rel="icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
."<TITLE>게시판을 찾을 수 없습니다.</TITLE>\\n"
.\'<BASE href="\'.BASEDIR.\'">\'."\\n"
."</HEAD>\\n"
.\'<BODY bgcolor="#EFEFEF" TEXT="#000000" LINK="#0000FF" VLINK="#660099" ALINK="#FF0000">\'."\\n"
.file_get_contents(PUBHEADFILE)."\\n" //전역 헤더
.\'<BASEFONT FACE="MS PGothic">\'."\\n"
.\'<A href="/">홈</a>\'."\\n"
.\'<A href="../">■게시판 일람■</A><BR>\'."\\n"
.\'<hr Style="height:1px; position:relative; top:-.4em;">\'."\\n"
.\'<FONT COLOR="#FF0000" SIZE="4" FACE="Arial">게시판을 찾을 수 없습니다.</FONT><BR><BR>\'."\\n"
."</BODY>\\n"
."</HTML>";
}
#------------------------------------------------------------------------------------------------------------
# read.php 직접 액세스시 - PrintBBSList
# ---------------------------------------
# 인수:없음
# 반환값:없음
#------------------------------------------------------------------------------------------------------------
function PrintBBSList() {
#게시판 일람 취득
$Han = new PDO(DBVERSION."./DB/Info.db");
$SQL = "SELECT * FROM BBSList";
$Result = $Han -> query($SQL);
$Data = $Result -> fetch(PDO::FETCH_ASSOC);
#게시판이 존재하는 경우 모두 표시
if($Data != "") {
while($Data != false) {
$List .= \'<TR align="center"><TD class="BBS_List"><A href="../read.php/\'.$Data["BBSDBName"].\'/">\'.$Data["BBSName"]."@".$Data["BBSSubName"]."</A></TD><TD>".$Data["BBSDBName"]."</TD><TD>".$Data["CreateTime"]."</TD></TR>";
$Data = $Result -> fetch(PDO::FETCH_ASSOC);
}
#존재하지 않는 경우
} else {
$List = \'<TR><TD colspan="3" align="center">게시판이 없습니다</TD></TR>\';
}
print "<HTML>\\n"
."<HEAD>\\n"
.\'<META http-equiv="Content-Type" content="text/html; charset=UTF-8">\'."\\n"
.\'<META http-equiv="Content-Style-Type" content="text/css">\'."\\n"
.\'<link rel="shortcut icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
.\'<link rel="icon" href="http://threadic.com/image/favicon.ico" type="image/x-icon">\'."\\n"
."<TITLE>게시판 일람</TITLE>\\n"
.\'<link rel="stylesheet" type="text/css" href="../style.css">\'."\\n"
."</HEAD>\\n"
."<BODY><BR><BR>\\n"
.file_get_contents(PUBHEADFILE)."\\n" //전역 헤더
.\'<SPAN class="BBS_List">\'."\\n"
.\'<TABLE cellspacing="1" cellpadding="0" class="TABLE_FRM" align="center">\'."\\n"
.\'<TBODY class="TD_ALL">\'."\\n"
.\'<TR class="TD_Purple18"><TD colspan="5">게시판 일람</TD></TR>\'."\\n"
.\'<TR align="center" class="U_Gray_Bold"><TD ID="Cell_Margin">게시판명</TD><TD width="150">경로</TD><TD width="100">작성일</TD></TR>\'."\\n"
.$List
."\\n</TBODY>\\n"
."</TABLE>\\n"
."</SPAN>\\n"
.\'<CENTER><A HREF="/index.php">홈</A></CENTER>\'
."</BODY>\\n"
."</HTML>";
}
#------------------------------------------------------------------------------------------------------------
# 게시판 설정 정보 취득 - getBBSSetting
# ---------------------------------------
# 인수:없음
# 반환값:설정 정보 연상 배열
#------------------------------------------------------------------------------------------------------------
function getBBSSetting() {
#게시판 설정 정보 취득
$BBSSource = Query("SELECT * FROM BBS");
#설정 정보 읽기
$BBS = $BBSSource -> fetch(PDO::FETCH_ASSOC);
return $BBS;
}
#------------------------------------------------------------------------------------------------------------
# 쿼리 송신 - Query
# ---------------------------------------
# 인수:SQL문, DB파일
# 반환값:결과 세트
#------------------------------------------------------------------------------------------------------------
function Query($SQL, $DBFile = BBSDB) {
$Han = new PDO(DBVERSION.$DBFile.".db");
$Result = $Han -> query($SQL);
return $Result;
}
?>
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.