Created
February 9, 2015 18:17
-
-
Save iGlitch/ab18c6bb095257948829 to your computer and use it in GitHub Desktop.
Another Basic PHP Chat
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<? /* 簡易チャット*/ | |
/*********php4 only***********/ | |
define(MEMBER, "member1.txt"); //メンバーファイル | |
define(CHATLOG, "chatmsg1.txt");//ログファイル | |
define(LINE, 10); //表示行数 | |
define(MAX, 100); //ログ保存行数 | |
define(ROM, 1); //見学者表示 0-無し,1-カウントのみ,2-ホスト表示 | |
define(SEPA,":"); //メンバー区切り文字 | |
session_register("name"); | |
foreach($HTTP_POST_VARS as $key=>$val){$$key=$val;} | |
/* | |
print_r($HTTP_POST_VARS); | |
print_r($HTTP_SESSION_VARS); | |
*/ | |
function DatePrint($now){ | |
$addr = getenv("REMOTE_ADDR"); | |
$host = @gethostbyaddr($addr); | |
$n_date = " <font size=-1 color=#888888>(".gmdate("m/d(D) H:i",$now+9*3600); | |
$n_date .="<!--".$host."-->)</font>"; | |
return $n_date; | |
} | |
function MemUpdate($name="",$id){ | |
$mem_arr = file(MEMBER); | |
$now = time(); | |
$addr = getenv("REMOTE_ADDR"); | |
$host = @gethostbyaddr($addr); | |
$fp = fopen(MEMBER, "w"); | |
foreach($mem_arr as $mem_data){ | |
list($m_name,$m_ip,$m_id,$m_time) = explode("\t", $mem_data); | |
if(($now-$m_time) < 60){ | |
if($m_id != $id){ | |
fputs($fp, $mem_data); | |
} | |
} | |
} | |
fputs($fp, "$name\t$host\t$id\t$now\n"); | |
fclose($fp); | |
} | |
function MemDump(){ | |
$mem_cnt = 0; | |
$rom_cnt = 0; | |
$mem_arr = file(MEMBER); | |
foreach($mem_arr as $mem_data){ | |
list($m_name,$m_ip,$m_id,$m_time) = explode("\t", $mem_data); | |
if($m_name){ | |
$mem_lst .= " ".$m_name.SEPA; | |
$mem_cnt++; | |
}elseif(ROM==2){ | |
$mem_lst .= " ".$m_ip.SEPA; | |
}elseif(ROM==1){ | |
$rom_cnt++; | |
} | |
} | |
return array($mem_cnt,$mem_lst,$rom_cnt); | |
} | |
function NameCheck($name, $uid=0){ | |
$mem_arr = file(MEMBER); | |
foreach($mem_arr as $mem_data){ | |
list($m_name,$m_ip,$m_id,$m_time) = explode("\t", $mem_data); | |
if(($uid != 0)&&($name==$m_name)&&($uid==$m_id)) return true; | |
} | |
return false; | |
} | |
?> | |
<html><head><title>簡易チャット</title> | |
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-sjis"> | |
<META HTTP-EQUIV="refresh" CONTENT="30; URL=<?echo $PHP_SELF;?>?"></head> | |
<body bgcolor=#eef7ff> | |
<? | |
$id = session_id(); | |
MemUpdate($name,$id); | |
$mem_arr = MemDump(); | |
echo "<<簡易チャット>> [ <a href=?>リロード</a> ] <br>"; | |
echo "参加者($mem_arr[0]):$mem_arr[1] "; | |
if(ROM!=0) echo "見学者:$mem_arr[2] 人"; | |
echo " Refresh 30秒"; | |
?> | |
<FORM method="post" action="<? echo $PHP_SELF;?>"> | |
<b>N:</b><INPUT name="name" type="text" size="10" maxlength="15" value="<?echo $name;?>"> | |
<b> : </b><INPUT name="message" type="text" size="45"> </textarea> | |
<INPUT name="submit" type="submit" value=" Send / Reload "> | |
</FORM> | |
<? | |
$lines = file(CHATLOG); //ファイルを配列に読み込む | |
if ($message && $name && Namecheck($name,$id)){ | |
$message = htmlspecialchars ($message);//タグ不可 | |
if(get_magic_quotes_gpc()) $message = stripslashes($message); | |
$message = nl2br($message); //改行文字の前に<br>を代入する。 | |
$message = ereg_replace( "\n", "", $message); //\nを文字列から消す。 | |
$name = htmlspecialchars ($name); | |
$date = DatePrint(time()); | |
$message = "\n<B>$name </B> > $message $date<BR>"; | |
$fp = fopen (CHATLOG , "w"); //書き込みモードでオープン | |
fputs ($fp, "$message"); //先頭に書き込む | |
for($i = 0; $i < MAX; $i++) //いままでの分を追記 | |
fputs($fp, $lines[$i]); | |
fclose ($fp); | |
echo $message; | |
} | |
for($i = 0; $i < LINE; $i++) | |
echo $lines[$i]; | |
echo "<br><a href=../>退室</a>"; | |
die("</body></html>"); | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment