Skip to content

Instantly share code, notes, and snippets.

@iGlitch
Created February 9, 2015 18:17
Show Gist options
  • Save iGlitch/ab18c6bb095257948829 to your computer and use it in GitHub Desktop.
Save iGlitch/ab18c6bb095257948829 to your computer and use it in GitHub Desktop.
Another Basic PHP Chat
<? /* 簡易チャット*/
/*********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 .= "&nbsp;".$m_name.SEPA;
$mem_cnt++;
}elseif(ROM==2){
$mem_lst .= "&nbsp;".$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]&nbsp;&nbsp;&nbsp;&nbsp;";
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