RSS

Компьютерная терминология    1_9  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  .....  A  Б  В  Г  Д  Ж  З  И  К  Л  М  Н  О  П  Р  С  Т  У  Ф  Х  Ц  Ч

Счетчик на PHP

   



Консультация юриста
Ваш регион:
Ваше имя:

Ваш телефон

(можно сотовый)

Ваш вопрос (можно кратко)


 
01.02.2002

1. Некоторые провайдеры обязывают свои клиентов пользоваться прокси-серверами, а теперь подумайте: что останется в переменной REMOTE_ADDR? Правильно: адрес прокси-сервера! А если на сайт зайдут несколько пользователей одного провайдера, скрипт будет думать что это один и тот же юзер.

2. Некоторые провайдеры, которые предоставляют доступ по кабельным сетям, время от времени меняют IP-адреса пользователей.

К сожалению, когда Тим Бернерс Ли в 91 году разрабатывал протокол HTTP, он хотел сделать его очень быстрым, поэтому удалил всю информацию о состоянии, чем прибавил работы веб-разработчикам.
Итак, от слов к делу..
Что нам понадобится для работы:
1. База данных mysql
2. PHP4
Создадим таблицу www_online:
CREATE TABLE www_online (
hid int(11) NOT NULL auto_increment,
sess_id char(255) NOT NULL default '',
last_time char(255) NOT NULL default '',
PRIMARY KEY (hid)
) TYPE=MyISAM;

В этой базе мы будем хранить соответственно:
Hid – ID, просто так?
Sess_id – ID сессии пользователя
Last_time – Время последней активности пользователя в секундах с начала эпохи (1970 г.).
Теперь код функции:

function show_online_user() {
global $database; //Импортируем массив с данными mysql
session_start(); //Начинаем сессию
session_set_cookie_params("0"); //Задаем время жизни куки
$id=session_id(); $time=time(); $past=time()-500; //Переменные(id - id сессии, time-текущее время,
past-время, после которого надо удалять сессии).
$link=mysql_connect($database[dbserv], $database[dbuser], $database[dbpass]); //Коннектимся к базе данных
mysql_select_db($database[dbname]); //Выбираем базу данных
mysql_query("DELETE FROM www_online WHERE last_time <'$past'"); //Удаляем старые сессии
$result=mysql_query("SELECT last_time FROM www_online WHERE sess_id='$id'"); //Выбираем таблицу
$rows=mysql_num_rows($result); //Если в таблице есть sess_id с $id, то равно 1, иначе 0
if ($rows!="0") {
mysql_query("UPDATE www_online SET last_time='$time' WHERE sess_id='$id'");
} else {
mysql_query("INSERT INTO www_online (last_time, sess_id) VALUES ('$time', '$id')");
}
$result = mysql_query("SELECT * FROM www_online"); //Выбираем все сессии
$count = mysql_num_rows($result); //Считаем число сессий
return "Сейчас на сайте $count человек(а)"; //Возвращаем число юзеров
mysql_close($link); //Закрываем коннект с mysql
}
Вот такая простая функция, решающая большую проблему.

 :::::  Mika Turin пишет 07.02.2002 @ 12:08  
Kak i pervij tak i vtoroj variant ne daet polnuju tochnostj pri podschete kolichestva poljzovatelej na saite. V pervom daet oshibku IP. A vo vtorom, "cookie", tak kak ispoljzovanie "cookies" vkljucheno ne vo vseh browserah. Posetitili s otkluchenimu kykami budut ne vidni dlja etoj sistemi.
P.S. kak priviljno shitatj sam eche ne pridulal, no shitatj nado i po IP i po cookies.
 :::::   пишет 07.02.2002 @ 12:52  
а какой смысл хранить $time в char(255)?
когда для этого есть тип int, да и выборка в этом случае будет на порядок быстрее.
А вообще считать посетителей онлайн это дело неблагодарное,
с таким же успехом можно выводить просто случайное число :)))) Точность та же
 :::::  Tankist пишет 07.02.2002 @ 17:32  
duncan:)
По поводу mysql: не придерайся:)
Случайное число?Типа 13243545?:))
 ::::: BarmaLINI пишет 08.02.2002 @ 11:14  
По поводу REMOTE_ADDRработает без проблем за прокси :о) (разве что прокси закрытыми бывают - запрет определения локального адреса)

if ($HTTP_X_FORWARDED_FOR != "" )
{
$pip = $HTTP_X_FORWARDED_FOR;
$phost = @gethostbyaddr($HTTP_X_FORWARDED_FOR);
$ip = $REMOTE_ADDR;
$host = @gethostbyaddr($REMOTE_ADDR);
}
else
{
$pip = "";
$phost = "";
$ip = $REMOTE_ADDR;
$host = @gethostbyaddr($REMOTE_ADDR);
}
 :::::  Tankist пишет 09.02.2002 @ 22:59  
session_set_cookie_params("0");
-
надо так:
session_set_cookie_params(time()+3600);
 :::::  ECTb пишет 19.02.2002 @ 22:59  
2BarmaLINI: HTTP_X_FORWARDED_FOR, как и HTTP_VIA_PROXY вообще лучше не трогать! ;) т.к. в эти переменные можно запихнуть все что угодно, можно запихнуть туда чужой IP, а можно и текст любой.
 :::::  laacz пишет 20.03.2002 @ 22:02  
Neponatno, pochemu delat` tormoz:

$result = mysql_query("SELECT * FROM www_online"); //Выбираем все сессии
$count = mysql_num_rows($result); //Считаем число сессий

Nado li zagruzat' bazu dannyh, zastvalyaya selektit' vsje zapisi? Jesli bystree budet

$count = mysql_result(mysql_query("SELECT COUNT(hid) FROM www_online"), 0);

Пример создание счетчика на PHP
<?
$counter="count.txt"; // Переменная с именем файла в котором будет происходить запись и прежде чем запускать скрипт
создайте его.
$mode=graph; // Переменная режима работы счетчика. Второе возможное значение - text
$file=fopen($counter, "r");//Открываем файл с параметром r - только чтение
if(!$file)//Проверка открыт ли файл
{
echo"[Произошла ошибка]";// Выводим сообщение об ошибке
}
else {
$num=fread($file,10); // Читаем первые 10 разрядов из открытого файла этого более чем достаточно
fclose($file); // Закрываем файл
}
$num++; //увеличиваем прочитанное значение на еденицу
$no_gaph=$num; //Присваиваем полученное значение переменной для использование в текстовом режиме
$file=fopen($counter,"w");//открываем файл на запись
fputs($file,$num);//пишем в файл новое значение
if($mode=="graph")//проверяем параметр режима, если он графический...
{
for($i=0; $i<9; $i++)//
{
$num=ereg_replace("$i","<img scr=$i.gif\ alt='$i'>",$num);//
}
echo "$num";//Выводим все теги
}else{//А если он графический...
echo" ВЫ $no_graph посетитель этой страницы";// просто выводим текстовое значение количества поситителей
}
?>
Для работы данного скрипта на сервере используются правы chmod 755,не забудьте создать файл count.txt

seo & website usability   inet   os faq   hardware faq   memory   video   cpu   hdd   mainboard faq   printer & scaner   modem   mobiles   hackzone

Технологии поискового маркетинга
Практика поискового маркетинга
Flash
Тэги
XML
DHTML
PHP
MySQL
WebMail
.NET
VBScript
CGI
Графические форматы Интернета
WEB-сайт шаг за шагом
CMS faq
FRAME faq
CSS faq
SSI faq
RSS faq
WAP faq
Web-Designed
Webhints
Файл настроек .htaccess
Настройка robots.txt

po gonn © 2005 "JULI'S BEEHIVE"