ご利用ありがとうございました
再入室 ホーム
OUT; exit; // 発言モード } elseif ($_GET['act'] == "reg" && trim($com) != "") { $lines = file(CHATLOG); //ファイルを配列に読み込む $now = gmdate("H:i", time()+9*3600); $dat = "
$name > $com($now)\n"; $fp = fopen (CHATLOG , "w"); //書き込みモードでオープン fputs ($fp, $dat); //先頭に書き込む for ($i = 0; $i < LOGMAX; $i++) { fputs($fp, $lines[$i]); } fclose ($fp); } // 参加者リスト更新、参加者取得 $member = MemUpdate($name); // 参加者数 $num = count($member); // 配列をスペースで繋げて文字列にする if (is_array($member)) { $list = implode(' ', $member); } // 発言時はリフレッシュタグ挿入 if ($name) $meta = ''; // ヘッダHTML表示 echo <<チャットの部屋$meta チャットの部屋
HEAD; // 名前が空の場合は入室フォーム表示 if (empty($name)) { echo <<

参加者($num)$list
LOGIN; // 名前がある時は入室しているので発言フォーム表示 } else { echo << $name >

参加者($num)$list HATUGEN; /* 発言表示部分 */ // ログを読み込む $lines = file(CHATLOG); // ページ番号 if (isset($_GET['page'])) { $page = $_GET['page']; // 表示開始位置計算 $st = $page * VIEW; } else { // 0未満なら0から開始 $st = $page = 0; } // ログを表示 for ($i = $st; $i < $st + VIEW; $i++) { echo $lines[$i]; } // 前次ページ番号計算 $prev = $page - 1; $next = $page + 1; echo '
'; // 前ページ番号が正なら前が存在する if ($prev >= 0) { echo ' '; } // 全ログ数が次ページまでのログ数より多いなら次が存在する if (count($lines) > $next * VIEW) { echo ' '; } echo '[退室]'; } echo ''; // 参加者リスト更新関数 function MemUpdate($name){ // ファイルから配列に読み込む $memlist = file(MEMBER); // IPアドレスからホストを取得 $host = gethostbyaddr(getenv('REMOTE_ADDR')); // 新規参加者かどうか。始めは真(true) $new = true; // 配列0番目から配列項目数分ループ for ($i = 0; $i < count($memlist); $i++) { // 名前、時間、ホストに展開。タブ記号区切り list($m_name,$m_time,$m_host) = explode("\t", $memlist[$i]); // 書き込み時間が何秒前か。設定より前なら配列の現在の項目削除 if ((time() - $m_time) > TERM) { $memlist[$i] = ""; } // 与えられた名前がすでに存在したら新規ではない if ($m_name == "$name") { $new = false; } // 名前用配列に追加 $sanka[] = $m_name; } // 新規名前で名前が空でないなら新規データとして追加。名前リストにも追加 if ($new && trim($name)!="") { $memlist[$i] .= "$name\t$now\t$host\t\n"; $sanka[] = $name; } // 参加者ファイルを更新 $fp = fopen(MEMBER, "w"); // 配列を空要素''で結合して1つの変数とする fputs($fp, implode('', $memlist)); fclose($fp); // 名前のリストを返す return $sanka; } // 参加者重複チェック関数 function MemCheck($name){ $memlist = file(MEMBER); for ($i = 0; $i < count($memlist); $i++) { // 変数に展開 list($m_name,$m_time,$m_host) = explode("\t", $memlist[$i]); // 与えられた名前が存在したら真を返す(true) if ($m_name == "$name") return true; } // それ以外の場合は偽(false) return false; } // 参加者削除関数 function MemExit($name){ $memlist = file(MEMBER); for ($i = 0; $i < count($memlist); $i++) { list($m_name,$m_time,$m_host) = explode("\t", $memlist[$i]); // 該当する名前がみつかったらその行のデータ削除 if ($m_name == "$name") $memlist[$i] = ""; } // 参加者ファイルを更新 $fp = fopen(MEMBER, "w"); fputs($fp, implode('', $memlist)); fclose($fp); } ?>