Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> счётчики 
V
    Опции темы
lasalexx
Дата 14.3.2006, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 19.7.2004
Где: Tbilisi

Репутация: 1
Всего: 1



могу своим кодом поделиться:

Код

<?
//mysql user-name
define("USER","username");

//mysql password
define("PASS","password");

//mysql database
define("DATABASE","database");

//id of your site
define("IDEN", "your id");

class counter
{
var $regdate;
var $online;
var $today;
var $all;

function counter($id,$ip_addr)
{
mysql_connect("localhost",USER,PASS) or die("Couldn't connect mysql databases");
mysql_select_db(DATABASE);

$query="SELECT today, vsego, segodna, regdate FROM counter WHERE id=\"".$id."\"";
$result=mysql_query($query);
if(mysql_num_rows($result)==0) return 0;

$this->online=$this->now($id,$ip_addr);
$this->regdate=mysql_result($result,0,"regdate");
$to=mysql_result($result,0,"today");
$t=explode("|",$to);
$a=mysql_result($result,0,"vsego");
$d=mysql_result($result,0,"segodna");

$ip=$ip_addr;
$novi_den=date("Y:m:d");
if($novi_den>$d)
{
$vchera=sizeof($t);
$query="UPDATE counter SET vsego=\"".($a+$vchera)."\", today=\"".$ip."\", segodna=\"".$novi_den."\" WHERE id=\"".$id."\"";
mysql_query($query);
$this->all=$vchera+$a+1;
$this->today=1;
mysql_free_result($result);
mysql_close();
return 1;
}

if(in_array($ip,$t))
{
$this->all=$a+sizeof($t);
$this->today=sizeof($t);
mysql_free_result($result);
mysql_close();
return 1;
}

$query="UPDATE counter SET today=\"".$to."|".$ip."\" WHERE id=\"".$id."\"";
mysql_query($query);
$this->today=sizeof($t)+1;
$this->all=$a+sizeof($t)+1;
mysql_free_result($result);
mysql_close();
return 1;
}


function now($id,$ip_addr)
{
$set_time=(int)date("i")*60+(int)date("s")+60;
$now_time=(int)date("i")*60+(int)date("s");

$query="SELECT online FROM counter WHERE id=\"".$id."\"";
$result=mysql_query($query);
$users=mysql_result($result,0,"online");

if(!$users)
{
$str=$ip_addr."=>".$now_time;
$query="UPDATE counter SET online=\"".$str."\" WHERE id=\"".$id."\"";
mysql_query($query);
return 1;
}

$mas=explode("|",$users);
for($i=0; $i<sizeof($mas); $i++) $mas[$i]=explode("=>",$mas[$i]);

$i=0;
while($i<sizeof($mas)&&($mas[$i][1]<$now_time||($mas[$i][1]-$now_time>60))) array_shift($mas);

if(!$mas)
{
$str=$ip_addr."=>".$set_time;
$query="UPDATE counter SET online=\"".$str."\" WHERE id=\"".$id."\"";
mysql_query($query);
return 1;
}

$ip=$ip_addr;
for($i=0; $i<sizeof($mas); $i++)
    if($mas[$i][0]==$ip) {$mas[$i][1]=$set_time; $n=sizeof($mas); break;}

if($i==sizeof($mas))
{
$me=array($ip,$set_time);
$n=array_push($mas,$me);
}

for($i=0; $i<sizeof($mas); $i++) $mas[$i]=implode("=>",$mas[$i]);
$str=implode("|",$mas);
$query="UPDATE counter SET online=\"".$str."\" WHERE id=\"".$id."\"";
mysql_query($query);

return $n;
}


function show()
{
$since=explode(":",$this->regdate);
switch($since[1])
{
case("01"):$since[1]="January"; break;
case("02"):$since[1]="February"; break;
case("03"):$since[1]="March"; break;
case("04"):$since[1]="April"; break;
case("05"):$since[1]="May"; break;
case("06"):$since[1]="June"; break;
case("07"):$since[1]="July"; break;
case("08"):$since[1]="August"; break;
case("09"):$since[1]="September"; break;
case("10"):$since[1]="October"; break;
case("11"):$since[1]="November"; break;
case("12"):$since[1]="December";
}

echo "
Now Online: ".$this->online." | Today: ".$this->today." | Since ".$since[1]." ".$since[2].", ".$since[0].": ".$this->all
."<br>";
}


function _counter()
{
unset($this->regdate);
unset($this->online);
unset($this->today);
unset($this->all);
}

};

$A=new counter(IDEN, $GLOBALS['REMOTE_ADDR']);
$A->show();
$A->_counter();
?>


а таблица вот такая:
Код

CREATE TABLE counter (
  id varchar(30) NOT NULL default '',
  domain varchar(150) NOT NULL default '',
  online longtext NOT NULL,
  today longtext NOT NULL,
  vsego varchar(12) NOT NULL default '',
  segodna varchar(12) NOT NULL default '',
  regdate varchar(12) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;


id - идентификатор сайта. так что эта таблица может работать для нескольких сайтов.
считает сколько уникальных юзеров зашло за всё время существовния сайта, сколько сегодня и сколько на данный момент. не использует cookies.

Это сообщение отредактировал(а) lasalexx - 14.3.2006, 23:28
PM MAIL WWW ICQ MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.