скрипт активных пользователей, количество пользователей не работает должным образом - PullRequest
1 голос
/ 05 февраля 2012

Я написал скрипт для вывода активных пользователей на мой сайт ....

частью этого является подсчет уникальных 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 в каждой строке ....

, поскольку я не совсем эксперт по 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 Ответ

1 голос
/ 05 февраля 2012

Вы смотрели на вывод 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));
?>

Edit:

Правильно, тогда это имеет смысл. Попробуйте это:

$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));
...