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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Счетчик посетителей - что использовать? Совет опытного народа 
:(
    Опции темы
InfMag
Дата 10.4.2005, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

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



Мне нужно сделать счетчик посетителей мол за всю жизнь скока их тут было. Но дело в том, что я не знаю что мне проверять.
IP, Cookie или еще что...
Сразу отмечаю, что сайт проверяет наличие кук и без них отказывается работать и сообщает об этом.
Помоему это глобальная проблема, прошу ваших советов. smile
PM   Вверх
PARROT
Дата 10.4.2005, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



Мой счетчик на IP. smile
Код

<?
$newip=$REMOTE_ADDR;#получаем текущий IP
$newtime=time();#получаем текущее время


$filename=date("Y-m-d");
$filename="$filename".".txt";


//Открываем файл счетчика на чтение
if(file_exists($filename))
{
$f=fopen($filename,"r");
$daycount=fread($f,filesize($filename));#считали в переменную
fclose($f);
}
$f=fopen("1.txt","r");
$u=fread($f,filesize("1.txt"));#считали в переменную
fclose($f);

//считываем файл в массив
$a=file("2.txt");
chop($str);
#в цикле проходим по массиву , разделяя каждый элемент по таб.
foreach($a as $str)
{
list($ip,$time)=explode("\t",$str);
$user[$ip]=$time;# формируем хэш
}

//Условие - если нет текущего ip в нашем хэше(значит чел еще не заходил) или время чела уже посещавшего сайт превысило час 
if (!$user[$REMOTE_ADDR]||(time()-$user[$REMOTE_ADDR])>3600)
{
$u++;

$daycount++;
$f=fopen($filename,"w+");
fwrite($f,$daycount);
fclose($f);

$f=fopen("1.txt","w");
fwrite($f,$u);
fclose($f);

$user[$newip]=$newtime;# добавляем ip и время нового чела или если старый то обновляем его время

#запиcываем хэш обратно в файл
$c=fopen("2.txt","w");
while(list($key,$value)=@each($user))
{
fwrite ($c,"$key\t$value\n");
}
fclose($c);
}
?>



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
PARROT
Дата 10.4.2005, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



Цитата(InfMag @ 10.4.2005, 20:10)
Сразу отмечаю, что сайт проверяет наличие кук и без них отказывается работать и сообщает об этом.

не совсем понятна эта фраза.
Если чел не был у вас на сайте, то ваших кук у него нет, а если он зашел, то сайт работать не будет?



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
InfMag
Дата 11.4.2005, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

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



PARROT
Да нет. Дело в том, что куки можно использовать в счетчике каким-нить образом.
Раскажи суть твоего счетчика. Что он делает.
PM   Вверх
PARROT
Дата 11.4.2005, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



Можно ставить куки посетителю на постоянку, без времени, пока мест он не сотрет куки в своем браузере.
Что мой счетчик делает?
Считает посетителей и показывает мне сколько было сегодня, по дням и за весь текущий период.


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
InfMag
Дата 11.4.2005, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

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



Ну уж не знаю. Мож мне вобще счетчик не ставить... Впринцыпе там есть счетчик сколько щас сидит юзверей.
PM   Вверх
PARROT
Дата 11.4.2005, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



Это личное дело каждого, мне вот например интересно узнать, сколько за день зашло народа, пора ли делать рекламу или можно еще подождать.


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
InfMag
Дата 11.4.2005, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

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



PARROT
Ну так если что, то я уже передумал. smile
Все равно буду счетчик делать.
У меня еще вопросы:
  • Что из себя представляют фалйы 1.txt и 2.txt
  • Приведи пример внутренностей каждого из этих файлов
  • Как ты сообщаешь юзеру сколько у тебя посетителей сегодгя, по дням, за весь период?

Добавлено @ 11:25
И да! Я еще не врубаюсь что делает chop($str);
Добавлено @ 11:29
И я еще не понимаю как ты открываешь для чтения:


$filename=date("Y-m-d");
$filename="$filename".".txt";

...

$f=fopen($filename,"r");
$daycount=fread($f,filesize($filename));#считали в переменную
fclose($f);


$filename ведь такой еще не создан?
Добавлено @ 11:29
Хотя нет, ты же проверяешь файл на наличие.
PM   Вверх
Opik
Дата 11.4.2005, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



InfMag
Код

chop($str); 

Цитата
Эта функция является псевдонимом функции rtrim().

Замечание: Действие chop() отличается от одноименной функции языка Perl, удаляющей последний символ строки.

Цитата
И я еще не понимаю как ты открываешь для чтения:

Код

if(file_exists($filename))
{
    $f=fopen($filename,"r");
}
else
{
    $f=fopen($filename,"w+"); 
}

если файл есть, читаем его, нет - создаем. (упрощенный вариант кода сверху.)
PM MAIL Skype   Вверх
InfMag
Дата 11.4.2005, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

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



PARROT
Вобщем за идею тебе спасибо. Вот что себе натыкал:
Код

<?php
$now_ip = get_ip();
$now_time = time();

$filename = $lb."data/counter/days/".date("d-m-Y").".dat";

if (!file_exists($filename))
{
    $fp = fopen($filename, "w+");
    fwrite($fp, "0");
    fclose($fp);
}
$fp = fopen($filename, "r");
$DayCount = fread($fp, filesize($filename));
fclose($fp);

$FileAllCount = $lb."data/counter/counter.dat";
$fp = fopen($FileAllCount, "r");
$AllCount = fread($fp, filesize($FileAllCount));
fclose($fp);

$FileUsers = $lb."data/counter/users.dat";
$users = file($FileUsers);
$u = "";
foreach($users as $u)
{
    list($ip, $time) = explode("|", $u);
    $user[$ip] = $time;
}

if (!isset($user[$now_ip]) || ($now_time - $user[$now_ip]) > 3600)
{
    $AllCount=$AllCount+1;
    $DayCount=$DayCount+1;

    $fp = fopen($FileAllCount, "w+");
    fwrite($fp, $AllCount);
    fclose($fp);

    $fp = fopen($filename, "w+");
    fwrite($fp, $DayCount);
    fclose($fp);

    $user[$now_ip] = $now_time;

    $fp = fopen($FileUsers, "w+");
    while (list($key, $value) = each($user)) fwrite($fp, "$key|$value|\n");
    fclose($fp);
}

?>

И да! Кстати. Вот тебе функция по вычислению уникального IP, через $REMOTE_ADDR он не во всех случаях виден: smile
Код

function get_ip()
{
    if ($ip = getenv("HTTP_CLIENT_IP"))
    {
        return $ip;
    }
    if ($ip = getenv("HTTP_X_FORWARDED_FOR"))
    {
        if ($ip == '' || $ip == "unknown")
        {
            $ip = getenv("REMOTE_ADDR");
        }
        return $ip;
    }
    if ($ip = getenv("REMOTE_ADDR"))
    {
        return $ip;
    }
}

Добавлено @ 14:33
Цитата

$AllCount=$AllCount+1;
$DayCount=$DayCount+1;

У меня почему-то оператор ++ тупит. Пишу $AllCount++; и $DayCount++;, а он ниче не прибавляет... Но может это только с нулем потому что.
PM   Вверх
PARROT
Дата 11.4.2005, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



У меня работает smile

Это в дополнение:

Создаешь файл daycount.php и вставляешь туда этот скрипт, он тебе печатает за каждый день, сколько у тебя было чел на сайте.
Код

<?
$filename=date("Y-m-d");
$filename="$filename".".txt";


//Открываем файл счетчика на чтение
if(file_exists($filename))
{
$f=fopen($filename,"r");
$daycount=fread($f,filesize($filename));#считали в переменную
fclose($f);
}
echo "За сегодня нас посетило $daycount человек(а)";
?>



--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
InfMag
Дата 11.4.2005, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

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



PARROT
Кстати, я обнаружил кое-что. Твой скрипт не обновляет время юзера если он на месте и скрипт не чистит базу. Вот что я себе написал:
Код

<?php
$now_ip = get_ip();
$now_time = time();

$filename = $lb."data/counter/days/".date("d-m-Y").".dat";

if (!file_exists($filename))
{
    $fp = fopen($filename, "w+");
    fwrite($fp, "0");
    fclose($fp);
}
$fp = fopen($filename, "r");
$DayCount = fread($fp, filesize($filename));
fclose($fp);

$FileAllCount = $lb."data/counter/counter.dat";
$fp = fopen($FileAllCount, "r");
$AllCount = fread($fp, filesize($FileAllCount));
fclose($fp);

$FileUsers = $lb."data/counter/users.dat";
$users = file($FileUsers);

for ($i=0; $i<sizeof($users); $i++)
{
    $_users = explode("|", $users[$i]);
    if (($now_time - $_users[1]) > 3600)
    {
        $change = 1;
        $changes[$i] = "";
    } else {
        $changes[$i] = $users[$i];
    }
}
if (isset($change))
{
    $fp = fopen($FileUsers, "w+");
    for ($i=0; $i<sizeof($users); $i++)
    {
        fwrite($fp, $changes[$i]);
    }
    fclose($fp);
    unset($change);
    unset($changes);
}

$users = file($FileUsers);
$u = "";
foreach($users as $u)
{
    list($ip, $time) = explode("|", $u);
    $user[$ip] = $time;
}

if (isset($user[$now_ip]))
{
    $user[$now_ip] = $now_time;
    $fp = fopen($FileUsers, "w+");
    while (list($key, $value) = each($user)) fwrite($fp, "$key|$value|\n");
    fclose($fp);
}

if (!isset($user[$now_ip]))
{
    $AllCount=$AllCount+1;
    $DayCount=$DayCount+1;

    $fp = fopen($FileAllCount, "w+");
    fwrite($fp, $AllCount);
    fclose($fp);

    $fp = fopen($filename, "w+");
    fwrite($fp, $DayCount);
    fclose($fp);

    $user[$now_ip] = $now_time;

    $fp = fopen($FileUsers, "w+");
    while (list($key, $value) = each($user)) fwrite($fp, "$key|$value|\n");
    fclose($fp);
}

?>

PM   Вверх
PARROT
Дата 12.4.2005, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

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



Вы просили пример? Вам его дали! Тут не выкладывают скрипты для обсуждения (у кого лучше или хуже!)
Лучше у Вас- Замечательно! Поздравляю! Так держать.
Вас где воспитывали???

Это сообщение отредактировал(а) PARROT - 12.4.2005, 16:23


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
InfMag
Дата 12.4.2005, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

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



PARROT
Я не осуждал твой скрипт, я предупредил, что если ты его будешь использовать, то у тебя может появиться трабл. Для тебя ж старался. smile
PM   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "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.1361 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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