超簡単チャット

 PHP版の超簡単なチャットスクリプトを作って見ました。と言っても、「超簡単掲示板」の変形に過ぎないんですけど(^^ゞオートリロード機能は無理でしたが、一応「お名前」のvalueにはフォームデータを利用できるようにしています。では、以下のソースをご覧下さい。

<HTML>
<HEAD>
<TITLE>超簡単チャット</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFBF0">
<FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST">
<P><FONT SIZE="5" COLOR="#990066">超簡単チャット</FONT></P>
<BLOCKQUOTE>
<P>
<TABLE BORDER="0" CELLSPACING="1" WIDTH="82%">
<TR>
<TD WIDTH="14%">
<P ALIGN="RIGHT">お名前:
</TD>
<TD WIDTH="23%"><INPUT TYPE="TEXT" NAME="name" SIZE="17" Value="<?php echo "$name"; ?>"></TD>
<TD WIDTH="4%">
<P ALIGN="RIGHT">色:
</TD>
<TD WIDTH="59%"><B><FONT COLOR="blue">青</FONT></B><INPUT TYPE="RADIO" NAME="s_color" VALUE="Radio" checked></FONT> <B><FONT
COLOR="red">赤</FONT></B><INPUT TYPE="RADIO" NAME="s_color" VALUE="red"></FONT> <B><FONT COLOR="green">緑</FONT></B>
<INPUT TYPE="RADIO" NAME="s_color" VALUE="green"></FONT> <B><FONT COLOR="#996600">茶</FONT></B>
<INPUT TYPE="RADIO" NAME="s_color" VALUE="#996600"></FONT> <B><FONT COLOR="#660099">紫</FONT></B>
<INPUT TYPE="RADIO" NAME="s_color" VALUE="#660099"></FONT></TD>
</TR>
<TR>
<TD WIDTH="14%">
<P ALIGN="RIGHT">メッセージ:
</TD>
<TD COLSPAN="3"><INPUT TYPE="TEXT" NAME="comment" SIZE="51"><INPUT TYPE="HIDDEN" NAME="action" SIZE="-1" VALUE="regist"><INPUT
TYPE="SUBMIT" NAME="Submit" VALUE="送信/更新"></TD>
</TR>
</TABLE>
</BLOCKQUOTE>
<P>
<HR>
</FORM>
通常のHTML表示部分。元の掲示板スクリプトをチャット用に改造しました。
<?php PHP開始の合図。
//===================初期設定=====================
//時間の取得
$now = date("Y/m/d H:i:s");
$data_file = "./cs_chat.dat"; //データファイル名
$data_max = 30; //データ最大記録数
チャットなので、データの最大記録数は30件に押さえました。
//===============データの書き込み=================
if ($action == "regist") {
 if (($name != "") && ($comment != "")) {
書き込み処理を行う条件提示。
  //ここから書き込みデータの調整
  $name = htmlspecialchars($name); //特殊文字のHTMLエントリへの変換
  $comment = htmlspecialchars($comment);
  $comment = nl2br($comment); //HTML改行文字の挿入
  $comment = str_replace("\r", "", $comment); //文字列の置換
  $comment = str_replace("\n", "", $comment);
  //ログファイルの区切文字(",")と区別するために文字コード(&#44)に書き換える。
  $name = str_replace(",", "&#44;",$name);
  $comment = str_replace(",", "&#44;",$comment);
フォームデータが$name$commentしかないので、この部分はかなり絞り込めました。
  //配列要素を文字列により連結
  $input_msg = implode(",", array($name,$s_color,$comment,$now));
  $message = file($data_file);
  $fp = fopen($data_file, "w");
  rewind($fp);
  fputs($fp, "$input_msg\n");
  //最大記録数の調整
  if($data_max <= sizeof($message))
   $msg_num = $data_max - 1;
  else
   $msg_num = sizeof($message);
  for($i = 0; $i < $msg_num; $i++){
   fputs($fp, $message[$i]);
  }
  fclose($fp);
  unset($message);
 }
}
定番のフォームデータの書き込み処理と、記事の保存数の調整処理。
//==================書き込み記事一覧表示==================
$message = file($data_file);
$msg_count = count($message);
for($i = 0; $i < $msg_count; $i++){
 list($name2,$s_color2,$comment2,$now2) = split( ",", $message[$i]);
 //記事表示部を生成
 print "<font size=4 color=$s_color2><b>$name2</b></font>";
 print " $comment2";
 print "<font size=2 color='green'> $now2</font>\n";
 print "<hr>\n";
}
記録データをファイルから読み出して、一行ずつ分割処理し、一覧表示。
?> PHP終了の合図。
</BODY>
</HTML>
HTMLの終了。

 *上の内容をこのまま複写しても動きません。何故なら、表示を見やすくする為コード中に全角スペースが入っているからです。実際にお使いになる時は、この点を修正してからサーバにアップして下さい。

HOME