超簡単チャット
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);
//ログファイルの区切文字(",")と区別するために文字コード(,)に書き換える。
$name = str_replace(",", ",",$name);
$comment = str_replace(",", ",",$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の終了。 *上の内容をこのまま複写しても動きません。何故なら、表示を見やすくする為コード中に全角スペースが入っているからです。実際にお使いになる時は、この点を修正してからサーバにアップして下さい。