자세한 얘기는 아래(http://www2.ssam.biz/blog/?tb=1&no=160)에서....

또 대폭적인 수정이 있었는데,
닉네임을 10자로 짤라 맞춰서,,
이름, 날짜, 본문의 구분을 전처럼 '@@@@@' 이걸로 구분하지 않고, 자리수로 하도록 바꿨다.
닉네임은 10자이상 입력하지 못하도록 되어있다. - 10자 이하는 무방..

그리고, 실시간 접속자 칸을 추가했다.
10초마다 갱신되며,, 채팅창에 글을 올려서, 닉네임이 있는 사람은 닉네임으로,
없는 사람은 ip(중간에 생략하고)로 접속자를 나타낸다.

-- 소스 셋째줄에
$db = "./777/".date("Ymd"); // 변경가능
여기서 777이란 디렉토리를 만들어주던지, 다른이름의 디렉토리로 하던지..
하여튼 그 디렉토리의 권한을 777(읽고,쓰고,수정하고)을 준다.
그 외에 따로 수정해야 하는 것 없음 ---

예제는http://www2.ssam.biz/chat5.php

<?
ob_start();
$db = "./777/".date("Ymd"); // 변경가능
$last = $db."_last";
$cnt = $db."_cnt";
$time = time();
?>
<center align="center">
<?
if($_POST[name] && $_POST[content]){
$memo = "";
$date = date("H:i:s");
if(!$_COOKIE[name]) {
setcookie("name", $_POST[name], $time + 86400);
$cmemo = str_pad($_SERVER[REMOTE_ADDR], 15).str_pad($_POST[name], 20).$time."\r\n";
$fp = fopen($cnt,"a");
fputs($fp,$cmemo);
fclose($fp);
$memo = " ".$date."<font color=blue>".$_POST[name]."</font>님이 입장하셨습니다.\r\n";
} else if($_COOKIE[name] != $_POST[name]) {
$memo = " ".$date."<font color=blue>".$_COOKIE[name]."</font>님이 닉네임을 <font color=blue>".$_POST[name]."</font>으로 바꿨습니다.\r\n";
setcookie("name");
setcookie("name", $_POST[name], $time + 86400);
}
$_POST[content] = preg_replace('`[\r\n]+`i', '', nl2br(stripslashes($_POST[content])));
$memo .= str_pad($_POST[name], 20).$date.$_POST[content]."\r\n";
$fp = fopen($db,"a");
fputs($fp,$memo);
fclose($fp);
$fp = fopen($last,"w");
fputs($fp,$time);
fclose($fp);
?>
<script>
window.open("?v=b&t=<?=$time?>","cbody");
location.replace("?v=w");
</script>
<?
} else if($_GET[v]=="w") {
?>
<form method="post" action="?">
<table border=5 cellspacing=4 cellpadding=4 width=750>
<col width=70><col>
<tr><td><input type="text" name="name" maxlength="10" style="width:70" value="<?=$_COOKIE[name]?>"></td>
<td><input type="text" name="content" style="width:560;height:20;font-size:9pt;overflow-y:auto">&nbsp;<input type="submit" value="쓰기"></td>
</tr></table>
</form>
<?
} else if($_GET[v]=="b") {
?>
<table border=5 cellspacing=2 cellpadding=4 width=90 style='position:absolute;top:0;left:10'>
<tr><td>
<?
if(file_exists($cnt)){
$fp = fopen($cnt,"r");
$memo = fgets($fp);
$name = substr($memo, 15, 20);
$name = trim($name);
if($name != ""){
echo $name."<br>";
} else {
$name = substr($memo, 0, 15);
$name = explode('.',$name);
$name = $name[0].".*.*.".$name[3];
echo $name."<br>";
}
}
?>
</td></tr></table>
<table border=5 cellspacing=2 cellpadding=4 width=750>
<col width=70><col><col width=45>
<?
if(file_exists($db)){
$fp = fopen($db,"r");
$i = 1;
while(!feof($fp)){
$memo = fgets($fp);
$name = substr($memo, 0, 20);
$date = substr($memo, 20, 8);
$content = substr($memo, 28);
if($name){
?>
<tr><td><?=$name?></td><td><?=$content?></td><td><?=$date?></td></tr>
<?
$i++;
}
}
fclose($fp);
}
?>
<tr><td></td><td style='display:none'><a name="rrr">&nbsp;</a></td></tr>
</table>
<p>
<script>
function go(){
window.open("?v=t&t=<?=$_GET[t]?>","tim");
}
setTimeout("go()", 2000);
function gg(){
window.open("?v=r&<?=$_GET[t]?>","cnt");
setTimeout("gg()", 10000);
}
setTimeout("gg()", 10000);
</script>
<?
} else if($_GET[v]=="t") {
$fp = fopen($last,"r");
$lastt = fread($fp,10);
fclose($fp);
?>
<script>
<?
if($lastt > $_GET[t]){
?>
window.open("?v=b&t=<?=$lastt?>","cbody");
<?
} else {
?>
setTimeout("location.reload();", 2000);
<?
}
?>
</script>
<?
} else if($_GET[v]=="r") {
$tmp = $cnt."_tmp";
if(file_exists($tmp)) rename($tmp,$cnt);
if($_COOKIE[name]) $cmemo = str_pad($_SERVER[REMOTE_ADDR], 15).str_pad($_COOKIE[name], 20).$time."\r\n";
else $cmemo = str_pad($_SERVER[REMOTE_ADDR], 15)." ".$time."\r\n";
$fp = fopen($tmp,"a");
fputs($fp,$cmemo);
fclose($fp);
?>
<script>
window.open("?v=b&t=<?=$_GET[t]?>","cbody");
window.open("","tim");
</script>
<?
} else {
?>
<html><head><title>[chat]</title></head>
<frameset rows="*,80, 10, 0" frameborder="0" border="0" framespacing="0" onload="return true;" onunload="return true;">
<frame src="?v=b#rrr" name="cbody" target="tim" marginwidth="0" marginheight="0" scrolling="auto" noresize>
<frame src="?v=w" target="cbody" marginwidth="0" marginheight="0" scrolling="no" noresize>
<frame src="" name="tim" target="cbody" marginwidth="0" marginheight="0" scrolling="no" noresize>
<frame src="" name="cnt" marginwidth="0" marginheight="0" scrolling="no" noresize>
</frameset>
</html>
<?
}
?>
</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>

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

채팅 소스 57 (mysql 안씀, ajax)  (1) 2008.05.26
채팅 소스 56 (mysql 안씀, ajax)  (0) 2008.05.26
채팅 소스 55 (mysql 안씀, ajax) - 닉도용 방지  (0) 2008.05.26
간단한 채팅7 -> 8 ->9 ->10  (0) 2008.05.26
간단한 채팅소스 6  (0) 2008.05.26
간단한 채팅소스4  (0) 2008.05.26
간단한 채팅소스3  (0) 2008.05.26
간단한 채팅소스2  (1) 2008.05.26
간단한 채팅소스(또는 메모장)  (0) 2008.05.26
데이타 파일  (0) 2008.05.26
by Anna 안나 2008. 5. 26. 17:51