Strict Standards: Resource ID#34 used as offset, casting to integer (34) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#36 used as offset, casting to integer (36) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Подскажите как отредактировать скрипт, отображающий количество юзеров на сайте
ТвойWeb » WebMaster класс » PHP/Perl » Подскажите как отредактировать скрипт, отображающий количество юзеров на сайте

Страниц (2): [1] 2 »
 

1. KreZ - 29 Октября, 2006 - 13:55:45 - перейти к сообщению
Имеется у меня вот такой скрипт
CODE:
<?php
$remote = $_SERVER["REMOTE_ADDR"];
$file = "online.txt"; // файл лога посетителей
$timeoutseconds = 300; // how long to keep track of users for in seconds
$timestamp = time();
$timeout = ($timestamp-$timeoutseconds);
$fp = fopen("$file", "a+");
$write = $remote."||".$timestamp."\n";
fwrite($fp, $write);
fclose($fp);
$online_array = array();
$file_array = file($file);
foreach($file_array as $newdata){
list($ip, $time) = explode("||", $newdata);
if($time >= $timeout){
array_push($online_array, $ip);
}
}
$online_array = array_unique($online_array);
$online = count($online_array);
if($online == "1"){
echo "1"; // выводится, если на сайте один человек
}else{
echo "$online"; // выводится, если на сайте несколько человек
}
?>


Но у него есть один недостаток: он ведет лог. Скидывает все IP в текстовый файл, а при большом количестве хостов этот файл может достигать нескольких Мб за неделю.
Поскольку в РНР я пока еще не разбераюсь, то отредактировать его безболезненно не могу.
Если просто удалить из скрипта строки
CODE:
$fp = fopen("$file", "a+");
$write = $remote."||".$timestamp."\n";
fwrite($fp, $write);
fclose($fp);

то он отображает количество юзеров неверно.

Может кто разбирается в РНР и знает как отучить скрипт от лога без последствий или где скачать скрипт, не ведущий лог?
2. TvoyWeb - 29 Октября, 2006 - 21:33:30 - перейти к сообщению
KreZ
Удалять этот код нельзя, и без записи в лог тоже не получится. Другое дело что нужно удалять старые записи из лога чтобы там оставались только записи за определенный период, то есть за то время за которое показывается сколько пользователей на сайте. Например за последние 10 минут.
3. KreZ - 30 Октября, 2006 - 01:57:05 - перейти к сообщению
А как это сделать не подскажите?
4. TvoyWeb - 30 Октября, 2006 - 02:10:42 - перейти к сообщению
KreZ
У меня сейчас совсем времени нет, сорри. Подожди ребята счас подтянутся. помогут.
5. KreZ - 30 Октября, 2006 - 05:53:34 - перейти к сообщению
Чисто интуитивно могу предположить значения функций:
CODE:
$fp = fopen("$file", "a+"); //открывает файл
$write = $remote."||".$timestamp."\n"; //указывает какие данные запиывать в файл
fwrite($fp, $write); //записывает эти данные
fclose($fp); //закрывает файл

Тогда у меня есть вариант. Можно добавить после этого еще код, который очистит файл. Что-то вроде такого:

$fp = fopen("$file", "a+"Подмигивание;
тут функция, удаляющая данные из файла
fclose($fp);

Но я не знаю что конкретно писать и будет ли оно работать. Что скажите?
6. TvoyWeb - 30 Октября, 2006 - 06:07:44 - перейти к сообщению
Попробуй так. (навскидку. Не проверял)
CODE:
<?php
$remote = $_SERVER["REMOTE_ADDR"];
$file = "online.txt"; // файл лога посетителей
$timeoutseconds = 300; // how long to keep track of users for in seconds
$timestamp = time();
$timeout = ($timestamp-$timeoutseconds);
$online_array = array();
$file_array = file($file);

foreach ($file_array as $key => $newdata) {
list($ip, $time) = explode("||", $newdata);
if ($time >= $timeout){
array_push($online_array, $ip);
} else {
unset($file_array[$key]);
}
}
$online_array = array_unique($online_array);
$online = count($online_array);
$fp = fopen("$file", "a+");
$file_array[] = $remote."||".$timestamp."\n";
$write = implode("",$file_array);
fwrite($fp, $write);
fclose($fp);
if ($online == "1") {
echo "1"; // выводится, если на сайте один человек
} else {
echo "$online"; // выводится, если на сайте несколько человек
}
?>
7. KreZ - 30 Октября, 2006 - 07:49:06 - перейти к сообщению
Недовольство, огорчение Выдает ошибку.
8. ETC - 30 Октября, 2006 - 08:23:07 - перейти к сообщению
KreZ
А текст ошибки приводить не обязательно?
9. KreZ - 30 Октября, 2006 - 09:10:43 - перейти к сообщению
Online:
Parse error: parse error in z:\home\192.168.5.32\www\online.php on line 9
10. TvoyWeb - 30 Октября, 2006 - 10:07:23 - перейти к сообщению
KreZ
Попробуй теперь. Не знаю как там одна перменная затесалась Улыбка.

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0326]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33