我写了一个脚本来输出我网站上的活跃用户....
部分是在日志中计算唯一的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);”行之后在我的代码中
答案 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));