PHP百行代碼快速構建簡易聊天室
無聊情況下,看能用比較少的代碼構建聊天室,一開始寫了整整100行把聊天室內完成,后來覺得很多功能沒有,又重新修改,加了不少代碼。其實不利用特別復雜的技術,比如模板、數據庫等等,一樣能做比較不錯的聊天室,適合個人使用。
基本功能:能登陸,聊天,記錄在線人數IP事件,能控制聊天的字體顏色,自動把轉化聊天中網址為鏈接地址,能定制聊天室標題、廣告信息等等。使用文本作為存儲媒體,又興趣可以參考代碼,并且進行擴展。
其實PHP作為快速開發的腳本語言是很棒的!
===代碼===
<?php/*** 黑夜路人簡易聊天室* 作者: heiyeluren <heiyeluren_at_163.com>* 創建: 2005-8-10 22:42* 修改: 2005-8-11 23:25*/error_reporting(7);session_start();header('ContentType:text/html;charset=gb2312');define('SCRIPT', $_SERVER['SCRIPT_NAME']);define('CHAT_NOTE', './chat.txt');define('ONLINE_LIST', './online.txt');define('REF_TIME', 5);define('CHAT_NAME', '黑夜路人聊天室');define('AD_MSG', '今天是中國情人節, 祝大家情人節快樂!!');
//獲取值if (isset($_GET['action']) && !empty($_GET['action'])) {$action = $_GET['action'];}
//如果已經登陸那么直接跳到聊天界面if (!isset($_GET['action']) && isset($_SESSION['username'])) {header('location:'.SCRIPT.'?action=chat');}
//登陸提示if (!isset($_GET['action'])) {if (!session_is_registered('username')){ echo ' <p><h3 align=center>[ '.CHAT_NAME.' ] © 2005</h3></p> <p align=center> <form action='.SCRIPT.'?action=login method=post> 呢稱: <input type=text size=25 maxlength=30 name=login_user> <input type=submit value=聊天> </form></p> '; exit;}}
//校驗登陸if ($action=='login'){if (isset($_POST['login_user']) && !empty($_POST['login_user'])) { $username = $_POST['login_user'];} else { $username = '游客';}session_register('username');save_online($username, get_client_ip());header('location:'.SCRIPT.'?action=chat');}
//開始聊天www.mypchelp.cnif ($action=='chat'){$online_sum = get_online_sum();echo '<head><title>[ '.CHAT_NAME.' ]</title></head><center><body bgcolor=#C4BFB9 style='font-size:12px;'> <div style='border:1px solid #999966; width:802px;height:450'><iframe src='http://www.lshqa.cn/bcjs/21083.html'.SCRIPT.'?action=show' name=show_win width=800 height=450 scrolling=auto frameborder=0></iframe></div><br> <marquee width=70% scrollamount=2> '.AD_MSG.' </marquee> [當前在線:$online_sum] <iframe src='http://www.lshqa.cn/bcjs/21083.html'.SCRIPT.'?action=say' name=say_win width=800 height=60 scrolling=no frameborder=0>';}
//說話界面if ($action=='say'){echo '<head><title>[ '.CHAT_NAME.' ]</title></head><center><body bgcolor=#C4BFB9 style='font-size:12px;'> <form action='.SCRIPT.'?action=save method=post name=chat onSubmit='return check()'> ['.$_SESSION['username'].']說:<input type=text size=80 maxlength=500 name=chatmsg style=' background-color:#99CC99; width:550px; height:22px; border:1px solid:#000000'> <select name=usercolor> <OPTION selected value='000000'>默認顏色</OPTION> <OPTION value='#000000'>黑色沉靜</OPTION> <option value='#FF0000'>紅色熱情</option> <option value='#0000FF'>藍色開朗</option> <option value='#FF00FF'>桃色浪漫</option> <option value='#009900'>綠色青春</option> <option value='#009999'>青色清爽</option> <option value='#990099'>紫色拘謹</option> <option value='#990000'>暗夜興奮</option> <option value='#000099'>深藍憂郁</option> <option value='#999900'>卡其制服</option> <option value='#FF9900'>鎦金歲月</option> <option value='#0099FF'>湖波蕩漾</option> <option value='#9900FF'>發亮藍紫</option> <option value='#FF0099'>愛的暗示</option> <option value='#006600'>墨綠深沉</option> <option value='#333333'>灰色軌跡</option> <option value='#999999'>倫敦灰霧</option> </select> <input type=submit value='說話' style='background-color:#ffffff'> <a href='http://www.lshqa.cn/bcjs/.SCRIPT.'?action=logoff title=退出聊天室 target=_top onclick='return confirm('你確定要退出聊天室嗎?')'>退出</a> </form> <script>function check(){if(document.chat.chatmsg.value==''){;alert('請輸入聊天信息!');return false;}return true;}</script> ';}
//保存說話if ($action=='save'){if ($_POST['chatmsg']!='') { save_chat($_POST['chatmsg'], $_SESSION['username'], $_POST['usercolor']);}header('location:'.SCRIPT.'?action=say');}
//顯示聊天記錄if ($action=='show'){echo '<body onload='scrollit()'>';echo '<META HTTP-EQUIV=REFRESH CONTENT=''.REF_TIME.';URL='.SCRIPT.'?action=show'>';if (file_exists(CHAT_NOTE)) { $chat_msg = @file_get_contents(CHAT_NOTE); echo $chat_msg;} else { echo '目前沒有人說話';}}
//退出聊天室if ($action=='logoff'){unset($_SESSION['username']);session_destroy();header('location:'.SCRIPT);}
/* 基本函數 */
//保存聊天記錄函數function save_chat($msg, $user, $color){if (!$fp = fopen(CHAT_NOTE, 'a+')) { die('創建聊天記錄文件失敗, 請檢查是否有權限.');}$msg = htmlspecialchars($msg);$msg = preg_replace('/([http|ftp://])*([a-zA-])+.([a-zA-Z0-9_-])+.([a-zA-Z0-9_-])+(a-zA-Z0-9_)*/', '<a href=0 target=_blank>0</a>', $msg);$msg = preg_replace('/([a-zA-Z0-9_.])+@([a-zA-Z0-9-])+.([a-zA-Z0-9-]{2,4})+/', '<a href=mailto:0>0</a>', $msg);$msg = date('H:i:s').' ['.$user.']說: <font color=''.$color.''>'.$msg.'</font><br>rn';if (!fwrite($fp, $msg)) { die('寫入聊天記錄失敗.');}fclose($fp);}//寫在線人信息function save_online($user, $ip){if (!$fp = fopen(ONLINE_LIST, 'a+')) { die('創建在線列表文件失敗, 請檢查是否有權限.');}$user = str_replace('|', '', $user);$line = $user.'|'.$ip.'|'.time().'rn';if (!fwrite($fp, $line)) { die('寫入在線列表失敗.');}fclose($fp);}//獲取在線人數function get_online_sum(){if (file_exists(ONLINE_LIST)) { $online_msg = file(ONLINE_LIST); return count($online_msg);} else { return 0;}}//獲取當前登陸用戶IPfunction get_client_ip(){if ($_SERVER['REMOTE_ADDR']) { $cip = $_SERVER['REMOTE_ADDR'];} elseif (getenv('REMOTE_ADDR')) { $cip = getenv('REMOTE_ADDR');} elseif (getenv('HTTP_CLIENT_IP')) { $cip = getenv('HTTP_CLIENT_IP');} else { $cip = 'unknown';}return $cip;}?>
