下面这段程序用一个文本文件record.php来记录在线用户,之所以用php作扩展名是为了防止别人直接在浏览器上看到。它记录每个用户的IP地址,最近活动时间和用户名。$refreshmin = 2;定义了如果2分钟不活动就被认为是下线了。
<?
@session_start();
if(!file_exists("record.php"))
{
$fp = fopen("record.php", "w");
flock($fp, 1);
fputs($fp, "<?die('')?>\n");
flock($fp, 3);
fclose($fp);
} $refreshmin = 2; 
$fp = fopen("record.php", "r"); 
flock($fp, 1); 
$found = 0;
$output = fgets($fp, 4096);
while ($buffer = fgets($fp, 4096))

$currentip = strtok($buffer, "\t");
if(time() - strtok("\t") < ($refreshmin * 60))
{
$currentname = chop(strtok("\t"));
if(($currentname == "" && $username == "" && $REMOTE_ADDR == $currentip) || ($username != "" && $username == $currentname))
{  
$found = 1;
$output .= $REMOTE_ADDR."\t".time()."\t$username"."\n";
$countnow++;

else
{
$output .= $buffer;
$countnow++;
}
}
}
if(!$found)
{
$output .= $REMOTE_ADDR."\t".time()."\t$username"."\n";
$countnow++;
}
flock($fp, 3); 
fclose ($fp); 
  
$fp = fopen("online/record.php", "w"); 
flock($fp, 1);
fputs($fp, $output);
flock($fp, 3);
fclose ($fp);
?>

解决方案 »

  1.   

    最后几行忘了改路径,改为
    $fp = fopen("record.php", "w"); 
    flock($fp, 1);
    fputs($fp, $output);
    flock($fp, 3);
    fclose ($fp);
    ?>
      

  2.   

    首先,用MySQL的工具建一个表: CREATE TABLE ccol( 
    id integer not null auto_increment, #记录的ID 
    ip char(15) not null, #访问者的IP地址 
    dtstamp datetime not null, #最后访问时间 
    uri char(255), #访问者请求的URI 
    primary key (id) 
    ); 然后,写一段PHP代码: <? 
    /* 
    文件:ccol.php - ConCurrent OnLine statistics 
    目的:统计同时在线浏览的人数 
    作者:Hunte, [email protected] 
    修改:2000-4-25 
    */ $duration=1800; 
    require "db.php"; 
    //包含DBSQL,详情可以参考我的另一篇文章 
    $ccol=new dbSQL; 
    $ccol->connect(); 
    $ccol->query("DELETE FROM ccol WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))>$duration"); 
    //删除超过半小时的记录 
    $ccol->query("SELECT * FROM ccol WHERE ip='$REMOTE_ADDR'"); 
    //判断当前的IP是否在该表中存在 
    if ($ccol->nf())//有? 

    $ccol->next_record();//下移找到的记录数组的指针 
    $id=$ccol->f('id'); 
    $ccol->query("UPDATE ccol SET dtstamp=now(), uri='$REQUEST_URI' WHERE id=$id"); 
    //设置最后访问时间和访问页面 

    else//没有 

    $ccol->query("INSERT INTO ccol VALUES (0, '$REMOTE_ADDR', now(), '$REQUEST_URI')"); 
    } $ccol->query("SELECT COUNT(*) AS ccol FROM ccol WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))<=$duration"); 
    //找出在半个小时内的记录,后面的WHERE子句可有可无--超出时间的已经被删除了 
    $ccol->next_record() 
    echo "在线人数:", $ccol->f('ccol'); 
    $ccol->free_result(); 
    ?> 怎么用呢?在站点的每个页面的上面调用这个程序,举例来说: 
    --index.php 
    ... 
    <!--显示在线人数-> 
    <?require ../stats/ccol.php?>