一,聊天室模塊實現
1,聊天室主頁面窗口設置
復制代碼 代碼如下:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<!--載入配置文件-->
<?php include_once 'config.php';?>
<!--頁面標題-->
<title><?php echo CHAT_NAME; ?></title>
<script language="javascript" src="main.js"></script>
<frameset rows="80,*,100" cols="*" frameborder="yes" border="1" framespacing="0">
<!--頂部窗口-->
<frame src="top.php" name="topFrame" scrolling="No" noresize="noresize" id="topFrame" title="topFrame" />
<frameset rows="*" cols="168,*" framespacing="0" frameborder="yes" border="1">
<!--左側窗口-->
<frame src="list.php" name="leftFrame" scrolling="No" id="leftFrame" title="leftFrame" />
<frameset rows="70%,*" cols="*" framespacing="0" frameborder="yes" border="1">
<!--公共聊天窗口-->
<frame src="center.php" scrolling="auto" name="mainFrame" noresize="noresize" id="mainFrame" title="mainFrame" />
<!--私聊窗口-->
<frame src="private.php" scrolling="auto" name="priFrame" id="priFrame" title="priFrame" />
</frameset>
</frameset>
<!--發言窗口-->
<frame src="talk.php" name="bottomFrame" scrolling="No" noresize="noresize" id="bottomsFrame" title="bottomFrame" />
</frameset>
<noframes>
<body></body>
</noframes>
2,文件操作函數
本聊天室模塊使用文本來保存用戶列表和發言信息,主要考慮對文件的操作在速度上要優於對數據庫的操作。
(1)fopen()函數,打開文件或者URL,如果打開失敗,函數返回FALSE
語法:fopen(filename,mode,include_path,context)
參數說明:
filename:必須,規定要打開的文件或URL
mode:必須,規定要求到該文件/流的訪問類型。
include_path:可選,如果也需要在include_path中檢索文件的話,可以將該參數設為1或TRUE。
context:可選。規定文件句柄的環境,context是可以修改流的行文的一套選項
mode參數的取值:
"r":只讀方式打開,將文件指針指向文件頭。
"r+":讀寫方式打開,將文件指針指向文件頭。
"w":寫入方式打開,將文件指針指向文件頭並將文件大小截為零。如果文件不存在則嘗試創建。
"w+":讀寫方式打開,將文件指針指向文件頭並將文件大小截為零。如果文件不存在則嘗試創建。
"a":寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建。
"a+":讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建。"x":創建並以寫入方式打開,文件指針指向文件頭。如果文件已存在,則fopen()調用失敗並返回FALSE,並生成一條E_WARNING級別的錯誤信息。如果文件不存在則嘗試創建。"x+":創建並以讀寫方式打開,將文件指針指向文件頭。如果文件已存在,則fopen()調用失敗並返回FALSE,並生成一條E_WARNING級別的錯誤信息。如果文件不存在則嘗試創建。
(2)fclose()函數,關閉打開的文件
語法:fclose(file)
參數:file:必須,規定要關閉的文件。file參數是一個文件指針,fclose()函數關閉指針指向的文件。文件指針必須有效,並且是通過fopen()或fsockopen()成功打開的文件。如果成功則返回true,否則返回false。
(3)讀取文件函數
********
fgets(file,length)函數用於一次讀取一行數據
file:必須,規定要讀取的文件
length:可選,規定要讀取的字節數,默認是1024字節。從file指向的文件中讀取一行並返回長度最多為length-1字節的字符串。碰到換行符(包括在返回值中)、EOF或者已經讀取了length-1字節後停止。如果沒有指定length,默認為1K,或者說1024字節。若失敗,則返回false。
********
file(path,include_path,context),將文件作為一個數組返回,數組中的每個單元都是文件中相應的一行,包括換行符在內。若失敗,則返回false。
path:必須,規定要讀取的文件。
include_path:可選。如果想在include_path中搜索文件,將該參數設為1.
context:可選。規定文件句柄的環境。context是一套可以修改流的行為的選項,若使用null,則忽略。
********
file_get_contents(path,include_path,context,start,max_length),是用於將文件的內容讀入到一個字符串中的首選方法。
path:必須,規定要讀取的文件
include_path:可選,如果也想在include_path中搜尋文件的話,可以將該參數設為"1".
context:可選,規定文件句柄的環境。context是一套可以修改流的行為的選項。若使用null,則忽略。
start:可選,規定在文件中開始讀取的位置。
max_length:可選,規定讀取的字節數。
(4)寫入文件函數
寫入數據也是PHP中常用的文件操作,在PHP中可以使用fwrite()和fputs()函數向文件中寫入數據。fputs()函數是fwrite()函數的別名。他們的用法相同。
語法:fwrite(file,string,length)
參數說明:
file:必須,規定要寫入的打開文件。
string:必須,規定要寫入的文件的字符串。
length:可選。規定要寫入的最大字節數。
fwrite()把string的內容寫入文件指針file處。如果指定了length,當寫入了length個字節或者寫完了string以後,寫入就會停止。發write()返回寫入的字節數,出現錯誤時則返回false。
(5)刪除文件
unlink(filename,context)函數用於刪除文件,該文件必須是關閉的,若成功則返回true,失敗則返回false。
filename:必須,規定要刪除的文件;
context:可選,規定文件句柄環境。context是可修改流的行為的一套選項。
3,定時刷新技術刪除不發言用戶
定時刷新,是指每隔一段時間,對象被重新加載一次,也可以只加載一次。使用javascript腳本能夠輕松實現該功能。
(1)setInterval()函數
JavaScript中的setInterval()函數可以每隔一段時間,就執行一次操作。該函數語法格式如下:
window.setInterval(Function,MilliSeconds)
參數Function表明要執行的操作,可以是一個函數。
參數MiliSeconds表示間隔的時間,單位是毫秒。
使用setInterval()函數後,只要不關閉頁面,該函數就會一直執行下去。如果想結束事件,可以使用clearInterval()函數。函數格式如下:
window.clearInterval(Interval)
參數Interval是setIntervald()函數的返回值。
(2)setTimeout()函數
setTimeout()函數和setInterval()函數用法相同,但setTimeout()函數只執行一次。用於在聊天室中定時刪除不發言的用戶。
4,滾屏顯示時滾動條定位技術
聊天室中的滾屏功能,最新發言信息是顯示在頁面的最底部,而每次刷新時,頁面焦點都被定位到最上面。滾動條的定位可分為整個頁面窗口的滾動條和頁面元素中的滾動條.
(1)窗口中的滾動條
窗口中的滾動條可以通過scroll()函數來實現定位。
語法:window.scroll(x,y)
參數x表示滾動條水平位置的坐標。參數y表示滾動條垂直位置的坐標。如果要將滾動條置底,那麼只要將y的值設置大一些即可。
復制代碼 代碼如下:
<script language="javascript"> //定位滾動條
function scrollWindow(){
this.scroll(0,75000); //設置滾動條坐標
setInterval('scrollWindow()',200); //每200毫秒執行一次函數
}
scrollWindow();
</script>
(2)頁面元素中的滾動條
頁面元素中的滾動條可以用scrollTop屬性來實現定位。scrollTop屬性表示當前對象的頂點距離其最外層對象元素的距離。語法如下:
object.scrollTop=distance;
在聊天室公共窗口中的滾屏效果,就是使用的該屬性來定位滾動條。公共窗口使用一個div層來顯示聊天信息。首先將div層的縱向滾動條設為自動,橫向滾動條設為無並自動換行。
復制代碼 代碼如下:
<div id="publist" >...</div>
在Javascript中設置縱向滾動條的scrollTop屬性等於它滾動高度(定位到聊天窗口的最下面)
復制代碼 代碼如下:
<script language="javascript">
//定位滾動條
function scrollWindow(){
document.getElementById('publist').scrollTop = document.getElementById('publist').scrollHeight;
setTimeout('scrollWindow()',200);
}
</script>
5,屏蔽刷新技術
屏蔽刷新,就是屏蔽<F5>鍵、屏蔽鼠標右鍵和隱藏浏覽器中的“刷新”按鈕3部分。每個部分使用的技術都不相同。
(1)隱藏“刷新”按鈕
open()函數的作用是打開一個新窗口,並可以對窗口樣式進行設置。
Open()函數的語法格式如下:
op=window.open(