renshanshan 发表于 2018-12-24 09:26:56

PHP聊天室简单实现

聊天室,是 Web 站上打发无聊人士的秘密武器。同时,站长或其它人员也可以在这儿杀时间。甚至发生一段轰轰烈烈的网络恋情呢,就算没有,起码可以增加打字的速度。聊天室,其实就是多人共同使用的 CGI 程序。程序将每个人输入的字符串,依系统接收完成的时间整理过后,再送给各个用户。而 Web 聊天室和BBS 的聊天室不同的地方是 BBS 聊天室可以每收到一句话,就马上分送给每位在聊天室的网络用户;Web 由于 CGI 程序不能像 BBS 的telnet 一直连接,Web CGI 必须以最快的速度将信息送出,然后结束连接。会形成这种情形,就是因为 Web 聊天室还是使用 HTTP传输协议,在 HTTP 实作的版本,无论是 0.9、1.0 或是 1.1 版都不能长期占据网络连接的 Port。
为了解决资料无法马上传输的问题,及更新信息的问题,Netscape 在 3.0 版浏览器之后使用了新的技术,而 InternetExplorer 也实作了这些 Netscape 研发出来的技术。Netscape 将它分成 Server Push 及 ClientPull 两种技术。Server Push 由 Web 服务器将资料以多重 MIME 编码,送给用户端,目前较少网站使用这种方式;而Client Pull 则利用了 HTML 的 meta 标签,并利用 http-equiv="Refresh"的属性,表示资料要重新载入,至于载入时间,则利用 content 属性来达成。
标签通常都放在 .. 的部分中,以便让浏览器可以仅早准备更新用户端的网页。下面为 meta 和 PHP 合用的例子,配置为每十五秒重新载入一次。




匿称:




上面的程序就是使用 Client Pull 的技术,每五秒就重新更新一次。同样地,它也 require 共用的 env.inc文件,要改变其中的变量时,马上就可以让所有的程序用到,这对开发网站来说,是蛮重要的方法,可以将网页程序中都会出现的地方。例如Copyright (C) 1996-2000 的字符串,放在一个文件上,到了新的一年,只要改一个文件,整个站都改了。
if (!file_exists($chatfile)) {
echo "尚未开张";
exit;
}
$uniqfile=$tempdir.uniqid(rand());
$shellcmd="/usr/bin/tail -50 ".$chatfile. " > ".$uniqfile;
passthru($shellcmd);
程序先检查有没有用户发送聊天内容的文件 /tmp/abc,若没有就显示尚未开张,等用户送聊天内容。若已有聊天资料,就抓出最后五十笔,在在另外的文件中准备显示。
$chatfilearray=file($uniqfile);
$j=count($chatfilearray);
for ($i=1; $i
页: [1]
查看完整版本: PHP聊天室简单实现