필명은 한번 쓰면, 쿠키로 저장되서, 자동으로 기입되고,
필명을 수정하면, 수정한다고 본문에 출력되고,,,
필명하고, 내용만 저장되도록 했다.

Mysql 안쓰고, 파일로 저장했다가 읽어서 출력하는 방식이고.
예제에서는 권한 777준(읽고,쓰고,수정) 폴더에 chat.dat 이름으로 저장하고 있고,
이 파일을 삭제하면, 채팅이 초기화된다.

저장될때 필명하고 본문의 구분을 @@@@@(골뱅이 다섯개)로 했으니까,
필명과 본문에는 @@@@@(골뱅이 다섯개)가 들어 있지 않아야 한다.

소스는 아래.
<center style="width:750" align="center">
<?
$db = "./777/chat.dat"; // 변경가능
if($_POST[name] && $_POST[content]){
if(!$_COOKIE[name]) setcookie("name", $_POST[name], time() + 86400);
if($_COOKIE[name] != $_POST[name]) {
$memo = "&nbsp;@@@@@<font color=blue>".$_COOKIE[name]."</font>님이 필명을 <font color=blue>".$_POST[name]."</font>으로 바꿨습니다.\r\n";
setcookie("name");
setcookie("name", $_POST[name], time() + 86400);
$fp = fopen($db,"a");
fputs($fp,$memo);
fclose($fp);
}
$_POST[content] = preg_replace('`[\r\n]+`i', '', nl2br(stripslashes($_POST[content])));
$memo = $_POST[name]."@@@@@".$_POST[content]."\r\n";
$fp = fopen($db,"a");
fputs($fp,$memo);
fclose($fp);
header("location:#bott");
}
?>
<table border=5 cellspacing=4 cellpadding=4 width=100%>
<col width=40><col>
<?
if(file_exists($db)){
$fp = fopen($db,"r");
$i = 1;
while(!feof($fp)){
$memo = fgets($fp);
$name = strtok($memo,"@@@@@");
$content = strtok("@@@@@");
if($name){
?>
<tr><td><?=$name?></td><td><?=$content?></td></tr>
<?
$i++;
}
}
fclose($fp);
}
?>
</table>
<a name="bott"></a><p>
<form method="post" action="<?=$_SERVER[PHP_SELF]?>" align=center>
<table border=5 cellspacing=4 cellpadding=4 align=center>
<tr><td width=70><input type="text" name="name" style="width:70" value="<?=$_COOKIE[name]?>">
<td><input type="text" name="content" row='2' style="width:400;height:40;font-size:9pt;overflow-y:auto"><input type="submit" value="쓰기" /></td></tr></table>
</form>
</center>
<style>
* {font-size:9pt}
a {color:black}
a:link {text-decoration:none}
a:visited {text-decoration:none}
a:hover {text-decoration:underline}
table {border-width:6px; border-style: outset}
</style>

위의 예제에서는
chat.dat 파일이 있는 폴더, 777 안에
.htaccess 파일로 직접적인 접근 허용치 않고, 야후로 돌려버린다.

내용은
RewriteEngine On
RedirectMatch /(.*)$ http://www.yahoo.com
이 두줄. 파일이름은 ˝.htaccess˝

그러므로 chat.dat 파일을 삭제하거나, 다운로드할때는
ftp로 접속해야 한다.(웹으로는 안되고)
만들어만 보고, 테스트 해본게 아니라.. 좀 불확실하다.
채팅프로그램이 서버부하가 심하다고 하던데,
이건 mysql에 접속하는 것도 아니니...
서버부하는 그다지.. 없을걸로 생각된다.
생각해보니.. 이 소스로 채팅은 어렵겠다는 생각이 든다.
내가 입력했을때, 나한테는 재깍 뜨지만,
상대가 입력했을때, 내가 보는 화면에서는 변화가 없을테니까....

그럼 1초마다 리프레시 되도록 하면 어떨까,
글쓰는 부분은 리프레시되면 안되니까, 프레임으로 분리해서, 하단에 두고,,,

'웹스터디 > nosqlboardchat' 카테고리의 다른 글

간단한 채팅소스 6  (0) 2008.05.26
간단한 채팅소스5  (1) 2008.05.26
간단한 채팅소스4  (0) 2008.05.26
간단한 채팅소스3  (0) 2008.05.26
간단한 채팅소스2  (1) 2008.05.26
데이타 파일  (0) 2008.05.26
게시판 설명3  (0) 2008.05.26
게시판 설명2  (0) 2008.05.26
게시판 설명1  (0) 2008.05.26
srboard 1.8 버전입니다.  (0) 2008.05.26
by Anna 안나 2008. 5. 26. 17:48