活动用户脚本,用户计数无法正常工作

时间:2012-02-05 18:52:08

标签: php foreach flat-file

我写了一个脚本来输出我网站上的活跃用户....

部分是在日志中计算唯一的ips,因为用于分割行/数据的数组在5分钟后从数组列表中卸载活动用户.......

然而,“现在3个在线用户”计数不正常......

它有点有用......当有人查看某个页面时,它说有1个用户

让我说我查看一个页面.... 1位访客

然后用户2查看页面.... 2位访客

但如果我再查看另一个页面,它会显示3个用户.....

即使我对两个页面请求使用相同的IP ....

这是我的代码

$data = file_get_contents('active-log.txt');

$break = "\r\n";

$lines = explode($break, $data);

foreach ($lines as $key => $value) {

$active_ip[] = $lines[$key][1];

}

$active_ip_count = array_unique($active_ip);

$active_users = (count($active_ip_count));

$ active_users是我用来显示一次有多少独立访问者在线的变量

提前感谢能帮助我的任何人,谢谢

...

编辑

.....

这是保存日志的示例....

 1328469393|157.55.39.84|g-book
 1328469398|157.55.39.84|downloads
 1328469400|157.55.39.84|badger
 1328469404|157.55.39.84|home
 1328469408|157.55.39.84|boneyard-dogs

第一部分是时间戳(从数组中删除行,如果时间戳超过5分钟......这样可以正常工作)

第二部分是ip

第三部分是页面查看,新行用\ r \ n

创建

$ lines [$ key] [1]是每行中每个ip的变量....

因为我不是exacly一个php专家,在编写脚本时,我在开发时大量测试它们,每次我添加一行新脚本,我回显数据,检查它我希望的,以确保我做没有错误......

这是我没有粘贴的一段代码,因为我认为没必要......

foreach($lines as $k=>$v) {

$lines[$k] = explode("|", $v); }

// echo $lines[0][0]; // now this is first array of first line .... line 2 / url would be - $lines[1][2]

这是在我的代码中,直接在“$ lines = explode($ break,$ data);”行之后在我的代码中

1 个答案:

答案 0 :(得分:1)

var_dump($active_ip)循环结束后,您是否查看了foreach的输出?有了这个设置,我很确定$lines[$key][1]只是你正在处理的第一个字符,所以由于多种原因它不能正常工作。 active-log.txt是什么样的?它是否只包含IP地址或用户名?如果它只包含IP地址,请考虑使用以下内容:

<?php
$data = file('active-log.txt');
$no_duplicate_ips = array_unique($data);
$active_users = (count($no_duplicate_ips));
?>

编辑:

是的,这是有道理的。试试这个:

$data = file_get_contents('active-log.txt');
$break = "\r\n"; //Note that it's generally a good idea to use PHP_EOL throughout your code, for greater cross-platform compatibility
$lines = explode($break, $data);

$exploded_data = array();
$active_ips = array();

foreach($lines as $v) {
    $exploded_data = explode("|", $v); 
    //Now check whether the timestamp is not > 5 min
    if(TIMESTAMP CHECK HERE) { 
         //OK, this one is not too old
         $active_ips[] = $exploded_data[1]; 
    }
}

$active_ip_count = array_unique($active_ip);
$active_users = (count($active_ip_count));