用PHP+文本数据就完全可以实现,一般的思路是记录下每个用户最后一次操作的时间,此时用此时的时间跟所有用户的最后操作时间相比较,如果,时间差超过预设的时间,就认为此用户已经离开,其相关数据也就可以用文本文件中删掉。
我的一个程序,你可以看一下。
http://hi-heart.51.net
在图片的下方有个下接菜单,如果看不到可刷一下页面,我的这个程序显示的是IP地址,可以很容易的变为记录用户名的。

解决方案 »

  1.   

    给你个文章看看
      统计在线人数 
    <? 
    $url = ’http://www.php.net’; 
    $url_encoded = rawurlencode($url); 
    $url_to_check = "http://www.altavista.com/cgi-bin/query? 
    kl=XX&pg=q&text=yes&q=link%3A$url_encoded&search=Search"; 
    ?> 
      现在我们有了我们需要的全部的URL 。到了我们抓回URL 的时候了。这步工作是通过使用file()函数。 <? 
    $url = ’http://www.php.net’; 
    $url_encoded = rawurlencode($url); 
    $url_to_check = "http://www.altavista.com/cgi-bin/query? 
    kl=XX&pg=q&text=yes&q=link%3A$url_encoded&search=Search"; 
    $alta_search = file($url_to_check); 
    ?> 
      现在我们所抓回的文件已经存放在数组$alta_search中。我们现在要在数组中查找我们想要的文本。我 
    们想要的文本就是"About (.*) pages found. "。(.*)表示在两个单词之间的任何东西。而且,如果没有人 
    链接我们的URL,AltaVista将显示"AltaVista found no document matching your query."。因为我们想知 
    道多少个人正在与我们的URL进行着链接,那段文本将被看作0个人链接。 <? 
    $url = ’http://www.php.net’; 
    $url_encoded = rawurlencode($url); 
    $url_to_check = 
    "http://www.altavista.com/cgi-bin/query?kl=XX&pg=q&text=yes&q=link%3A$url_encoded&search=Search"; $alta_search = file($url_to_check); 
    for ($i = 0; $i < count($alta_search); $i++) { 
    if(eregi( "About (.*) pages found.", $alta_search[$i])){ 
    $how_many = eregi_replace( "<P>About (.*) pages found.", "1", $alta_search 
    [$i]); 
    }elseif(eregi( "AltaVista found no document matching your query.", $alta_search 
    [$i])){ 
    $how_many = ’0’; 


    ?>
      

  2.   

    用PHP和MySQL写一个用户在线显示的程序 
    --------------------------------------------------------------------------------  记数器可完成访问 web 页的总次数,但却不能得知一个时段中访问量的动态记载,下面就来介绍如何写一个各个时段动态显示访问量的方法.   要记载访问量,首先就要在 mysql 内建立一个数据库,姑且给这个数据库取名为 line,同时建立一个名为 line 
    的数据表,表内的字段分别为"用户名(name varchar(20)),时间(time datetime)".当然读者也可根据需要增加数据表的字段.   建立好数据库后,就可以开始设计程序了,现在先理清一下思路,要想显示访问量,当然数据库就必须要有记录,我已假设读者有能力写一个用户登入程序了,所以向数据库添加纪录可在登入程序假设为 login.php 里添加: 先给现在时间付值:$time=date('Y-m-d H:i:s'); 
    mysql_select_db(line); 
    mysql_query("insert into line (name,time) values('$name','$time')"); 好了,现在每一位登入的用户在数据库里都有了一个记录,下面就来完成用户在线显示的程序 line.php: <? 
    mysql_connect("local","",""); 
    mysql_select_db(line); 
    $result=mysql_query("select * from line"); 
    $num=mysql_numrows($result); 
    if (!empty($num)) { 
    echo "<table><tr><td>"; 
    echo "现在在线人数为:$num"; 
    echo "</td></tr>"; 
    for($i=0;$i<$num;$i++){ 
    $name=mysql_result($result,$i,"name"); 
    echo "<tr><td>用户:$name</td></tr>"; 


    ?>   上面这段程序已能显示所有在线的用户人数及各用户名,当然这个程序还很不完善.如果其中一个用户登出离开后,数据库就不应该有此用户的记录所以,还得在登出程序假设为 logout.php 内加上删除功能: mysql_select_db(line); 
    mysql_query("delete from line where name='$name'");   这时一个基本的用户在线功能已经完成,接下来继续在 line.php 内增加代码使功能更加完善,首先我们得规定用户在多长时间没继续浏览 line.php 时就认为该用户已经离开,这里给定一个时间限制为 5 分钟,也就是说程序将显示从现在开始的前 5 分钟的用户情况,所以必须 line.php 内设置一个现在时间告知程序从这个时间开始执行,然后实现程序执行时把数据库内记录的时间减去现在时间大于 5 分钟的所有记录删除,这样任何用户在执行 line.php 时,都能看到5分钟内的所有在线的用户,完成这个功能需要以下这个数据库语句: delete from line where time<date_sub('$time',interval 5 
    minute)   但是其中还有一个问题就是如果有个用户一直在不停地执行 line.php 超过 5 分钟以上时,程序必须得分辨出该用户并一直显示该用户,在这就得利用 cookie 来实现更新数据库的时间记录了,因为是登入认证的,所以会有个 cookie 来记住用户的资料的,假设这个记录用户姓名的 cookie 变量为 $cookiename (具体的变量视 cookie 的设置而定),剩下的就很好办了,利用这个 cookie 变量完成数据库的修改: update line set time='$time' where name='$cookiename' 下面来完善 line.php: <? 
    //设置现在的时间 
    $time=date('Y-m-d H:i:s'); 
    mysql_connect("local","",""); 
    mysql_select_db(line); //更新用户的记录 
    mysql_query("update line set time='$time' where name='$cookiename'"); //删除超过 5 分钟的用户记录 
    mysql_query("delete from line where time<date_sub('$time',interval 5 minute)"); $result=mysql_query("select * from line"); 
    $num=mysql_numrows($result); 
    if (!empty($num)) { 
    echo "<table><tr><td>"; 
    echo "现在在线人数为:$num"; 
    echo "</td></tr>"; 
    for($i=0;$i<$num;$i++){ 
    $name=mysql_result($result,$i,"name"); 
    echo "<tr><td>用户:$name</td></tr>"; 


    ?>