Ru-Board.club
← Вернуться в раздел «Ikonboard v.2»

» Глюк с гостями: больше одного не показывает

Автор: Xnom
Дата сообщения: 02.03.2003 21:42
Marilda

Цитата:
У меня вроде не через АЦ 15 устанавливается.

у тебя старая версия форума?
Если ты это кол-во минут не через АЦ регулируешь, то нужно оставить
Автор: Marilda
Дата сообщения: 02.03.2003 21:48
Xnom
Наверное старая, два года уж минуло. В АЦ в "настройке переменных" кол-во минут не устанавливается, а в icon.lib sub whosonline {...} строка $membergone = 15; есть. Так что оставляю.


Добавлено
Пашет!!!!!
Александру Ipp и всем-всем-всем огромное спасибо!
Автор: olsufr
Дата сообщения: 10.04.2003 21:18
У меня IB2.1.9 и есть проблема с показом количества гостей.
Т.е. в он-лайне всегда только один гость.

По совету Alexander Ipp сделал все нужные коррекции, но все проблема не решена.

Все предлагаемые изменения в файле whosonline не сделал, так как уже все ненужные строки отсутствовали, а те что нужно было добавить уже были добавлены.
Файл icon.lib изменил как указывалось.

Но не работает. Все по старому.
Помогите, может для 2.1.9 (скачан с руборда) есть какие-то дополнительные нюансы?


Цитата:
Теперь откройте whosonline.cgi
Найдите:
Код:
foreach $line (@onlinedata) {

Выше добавьте:
Код:
&getmember("$inmembername");
if ($membercode eq "ad") { $viewusrIP = "ok"; } else { undef $viewusrIP; }

Найдите:
Код:
($savedusername, $savedtime, $savedwhere) = split(/\|/, $line);

И замените на:
Код:
($savedusername, $savedtime, $savedwhere, $usrIP) = split(/\|/, $line);
unless ($viewusrIP eq "ok") {undef $usrIP;}

Найдите:
Код:
<b>$savedusername</b>

И замените на:
Код:
<b>$savedusername</b> $usrIP

Найдите:
Код:
$lookfor = substr($savedusername, 0, 5);
if ($lookfor eq "$ibtxt{'0043'}") { $savedusername = "$ibtxt{'0043'}"; }

Уберите или закомментируйте эти строки.
Найдите:
Код:
if ($savedusername eq "$ibtxt{'0043'}" && $savedwhere eq "Logging in") { next; }

Сделайте с ней то же самое.
Вроде всё, наслаждайтесь.


В файле icon.lib:

Цитата:
sub whosonline {
local($instruct) = @_;
($tempusername, $where, $method) = split(/\|/, $instruct);

$guests = 0;
$members = 0;
$currenttime = time;
### Если новая версия, с данной строкой поступаем как обычно. lol
$membergone = 15;
$userexpire = $currenttime - ($membergone * 60);

$ipaddresstowo = $ENV{'REMOTE_ADDR'};
#$ipaddresstowo = "786.345.785.12";

######## Stats hack
#$logname = $tempusername;
########
&getmember("$inmembername");
if ($tempusername eq "Guest" || $userregistered eq "no") { $tempusername = "Guest"; }

$filetoopen = "$ikondir" . "data/onlinedata.dat";
$filetoopen = &stripMETA($filetoopen);
open(FILE,"$filetoopen");
#flock(FILE, 1);
@onlinedata = <FILE>;
close(FILE);

open(FILE,">$filetoopen");
#flock(FILE, 2);
$memberprinted = "no";
foreach $line (@onlinedata) {
chomp $line;
($savedusername, $savedtime, $savedwhere, $savedip) = split(/\|/, $line);
$savedusername =~ s/ /_/g;
$tempusername =~ s/ /_/g;
#$savedusername = &unHTML($savedusername);
#$tempusername = &unHTML($tempusername);
unless ("$userexpire" > "$savedtime") {
if ($tempusername eq $savedusername) {
if ($savedusername eq "Guest" && $savedip eq $ipaddresstowo) {
print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";
$memberprinted = "yes";
}
elsif ($savedusername eq "Guest" && $savedip ne $ipaddresstowo) {
print FILE "$line\n";
}
elsif ($savedusername ne "Guest") {
print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";
$memberprinted = "yes";
}
} else { print FILE "$line\n"; }
}
} # end foreach
if ($memberprinted eq "no") { print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";}
close(FILE);
####### Stats hack
#$referer = $ENV{'HTTP_REFERER'};
#$browser = $ENV{'HTTP_USER_AGENT'};
#$media = $ENV{'HTTP_ACCEPT'};
#
#open(LOGFILE, ">>$ikondir/data/stats.log");
##flock(FILE, 2);
#print LOGFILE "$logname|$currenttime|$where|$referer|$ipaddress|$browser\n";
#close(LOGFILE);
#######
if ($method eq "$ibtxt{'0016'}") {

$filetoopen = "$ikondir" . "data/onlinedata.dat";
$filetoopen = &stripMETA($filetoopen);
open(FILE,"$filetoopen");
@onlinedata = <FILE>;
close(FILE);
foreach $line (@onlinedata) {
chomp $line;
($savedusername, $savedtime, $savedwhere, $savedipadr) = split(/\|/, $line);
$lookfor = substr($savedusername, 0, 5);
if ($lookfor eq "$ibtxt{'0043'}") { $guests++; }
else {
$members++;
$cleanmember = $savedusername;
$cleanmember =~ s/ /\_/g;
$savedusername = substr($savedusername,0,20) if length $savedusername > 19;
$memberoutput .= qq~&raquo; <a href="$profileprog?action=show&member=$cleanmember">$savedusername </a>~;
}
}
}
} # end routine

Автор: Xnom
Дата сообщения: 11.04.2003 01:10
olsufr

Цитата:
Помогите, может для 2.1.9 (скачан с руборда) есть какие-то дополнительные нюансы?

нет, ничего подобного не замечано.
Этот хак работает. Прочитайте всю тему, пожалуйста.
Автор: olsufr
Дата сообщения: 11.04.2003 21:26
Xnom, я прочитал всю тему, но у меня не работает нормальный показ гостей.

Помогите, плиз.

Здесь я выложил свои файлы (формат txt):
ikon.lib
whosonline.cgi
Автор: Xnom
Дата сообщения: 16.04.2003 00:03
olsufr
я не вижу ошибок в Ваших файлах...

Автор: olsufr
Дата сообщения: 16.04.2003 00:48
Xnom, togda v chem mozhet bytj delo?
Gostj vsegda odin.
Автор: Marilda
Дата сообщения: 16.04.2003 10:20
olsufr
А время, за которое считается число посетителей, какое? Это если оно в АЦ устанавливается. Может, минут совсем мало и гость действительно один?
Автор: olsufr
Дата сообщения: 16.04.2003 13:30
Marilda, а где в АЦ устанавливается это время?
Я посмотрел в раздел "Настройка переменных", но ничего похожего там я не нашел.


Добавлено
В icon.lib sub whosonline {...}
у меня есть строка $membergone = 15;
Автор: Marilda
Дата сообщения: 16.04.2003 13:52
olsufr
В более поздних версиях устанавливается через АЦ. Но раз
Цитата:
есть строка $membergone = 15;
то значит, дело не в этом.
Впечатление, что взяты не окончательный варианты правки во whosonline.cgi и ikon.lib, а промежуточные, т.к. до опубликования Александром Ипп окончательного варианта были такие же жалобы.




Добавлено
А в onlinedata.dat тоже только один гость?
Автор: olsufr
Дата сообщения: 16.04.2003 15:57

Цитата:
А в onlinedata.dat тоже только один гость?

Да.
Автор: Shurik
Дата сообщения: 17.04.2003 06:25
olsufr
я когда отсюда взял хак - у меня тоже коряво работало. Пришлось потом доделывать. Проверь там переменную с IP. Нужно, чтобы скрипт брал из окружающей переменной айпи и записывал это все в onlinedata.dat (насколько я помню).
Автор: olsufr
Дата сообщения: 17.04.2003 16:56
Shurik, а как это сделать?
Мог бы дать конкретный рецепт?
Автор: Xnom
Дата сообщения: 17.04.2003 18:11
olsufr
попробуй в ikon.lib так прописать:

Код:
sub whosonline {
local($instruct) = @_;
($tempusername, $where, $method) = split(/\|/, $instruct);

$guests = 0;
$members = 0;
$currenttime = time;
$userexpire = $currenttime - ($membergone * 60);

$ipaddresstowo = "$ENV{'HTTP_X_FORWARDED_FOR'}-$ENV{'REMOTE_ADDR'}-$ENV{'HTTP_PROXY_CONNECTION'}-$ENV{'HTTP_VIA'}";
&getmember("$inmembername");
if ($tempusername eq "Guest" || $userregistered eq "no") {
$tempusername = "$ibtxt{'0043'}"; }

$filetoopen = "$ikondir" . "data/onlinedata.dat";
$filetoopen = &stripMETA($filetoopen);
open(FILE,"$filetoopen");
flock(FILE, 1);
@onlinedata = <FILE>;
close(FILE);

open(FILE,">$filetoopen");
flock(FILE, 2);
$memberprinted = "no";
foreach $line (@onlinedata) {
chomp $line;
($savedusername, $savedtime, $savedwhere, $savedip) = split(/\|/, $line);
$savedusername =~ s/\_/ /g;
$tempusername =~ s/\_/ /g;
$savedusername = &unHTML($savedusername);
$tempusername = &unHTML($tempusername);
unless ("$userexpire" > "$savedtime") {
if ($tempusername eq $savedusername) {
if ($savedusername eq "Guest" && $savedip eq $ipaddresstowo) {
print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";
$memberprinted = "yes";
}
elsif ($savedusername eq "Guest" && $savedip ne $ipaddresstowo) {
print FILE "$line\n";
}
elsif ($savedusername ne "Guest") {
print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";
$memberprinted = "yes";
}
} else { print FILE "$line\n"; }
}
} # end foreach
if ($memberprinted eq "no") { print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";}
close(FILE);

if ($method eq "$ibtxt{'0016'}") {

$filetoopen = "$ikondir" . "data/onlinedata.dat";
$filetoopen = &stripMETA($filetoopen);
open(FILE,"$filetoopen");
@onlinedata = <FILE>;
close(FILE);
foreach $line (@onlinedata) {
chomp $line;
($savedusername, $savedtime, $savedwhere, $savedipadr) = split(/\|/, $line);
$lookfor = substr($savedusername, 0, 5);
if ($lookfor eq "$ibtxt{'0043'}") { $guests++; }
else {
$members++;
$cleanmember = $savedusername;
$cleanmember =~ s/ /\_/g;
$savedusername = substr($savedusername,0,20) if length $savedusername > 19;
$memberoutput .= qq~&raquo; <a href="$profileprog?action=show&member=$cleanmember">$savedusername </a>~;
}
}
}
} # end routine
Автор: olsufr
Дата сообщения: 17.04.2003 18:28
Xnom, спасибо за помощь.
Но гость все также один.
Автор: Xnom
Дата сообщения: 17.04.2003 18:36
olsufr
хорошо, тогда вот этот код:

Код:
if ($tempusername eq $savedusername) {
if ($savedusername eq "Guest" && $savedip eq $ipaddresstowo) {
print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";
$memberprinted = "yes";
}
elsif ($savedusername eq "Guest" && $savedip ne $ipaddresstowo) {
print FILE "$line\n";
}
elsif ($savedusername ne "Guest") {
print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";
$memberprinted = "yes";
}
} else { print FILE "$line\n"; }
}
Автор: olsufr
Дата сообщения: 17.04.2003 23:44
У меня чего-то вообще скрипт whosonline.cgi (после изменений в ikon.lib) перестал работать: белое место(никаких сообщений об ошибке).

Вот ссылка на ikon.lib
Автор: Xnom
Дата сообщения: 18.04.2003 01:07
olsufr
не работает, так не работает поехали дальше

попробуй этот код (из первоначального куска)

Код:
if ($tempusername eq $savedusername) {
if ($savedusername eq "Guest" && $savedip eq $ipaddresstowo) {
print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";
$memberprinted = "yes";
}
elsif ($savedusername eq "Guest" && $savedip ne $ipaddresstowo) {
print FILE "$line\n";
}
elsif ($savedusername ne "Guest") {
print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";
$memberprinted = "yes";
}
} else { print FILE "$line\n"; }
}
} # end foreach
if ($memberprinted eq "no") { print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";}
close(FILE);

Автор: Shurik
Дата сообщения: 18.04.2003 10:44
olsufr
ладно, если не забуду из дома взять- дам.
но тебе надо, чтобы у тебя РЕАЛЬНО было несколько гостей.
Автор: Shurik
Дата сообщения: 29.04.2003 21:37
вот мой whosonline:


Код:
sub whosonline {
local($instruct) = @_;
($tempusername, $where, $method) = split(/\|/, $instruct);

$guests = 0;
$members = 0;
$currenttime = time;
$membergone = 30;
$userexpire = $currenttime - ($membergone * 60);

$ipaddresstowo = $ENV{'REMOTE_ADDR'};
#$logname = $tempusername;
&getmember("$inmembername");
#$tempusername = "$ibtxt{'0043'} $ipaddress" if ($tempusername eq "$ibtxt{'0043'}");
if ($tempusername eq "Guest" || $userregistered eq "no") { $tempusername = "Guest"; }

$filetoopen = "$ikondir" . "data/onlinedata.dat";
$filetoopen = &stripMETA($filetoopen);
open(FILE,"$filetoopen");
flock(FILE,1);
@onlinedata = <FILE>;
close(FILE);

open(FILE,">$filetoopen");
flock(FILE, 2);
$memberprinted = "no";
foreach $line (@onlinedata) {
chomp $line;
($savedusername, $savedtime, $savedwhere, $savedip) = split(/\|/, $line);
$savedusername =~ s/ /_/g;
$tempusername =~ s/ /_/g;
unless ("$userexpire" > "$savedtime") {
if ($tempusername eq $savedusername) {
if ($savedusername eq "Guest" && $savedip eq $ipaddresstowo) {
print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";
$memberprinted = "yes";
}
elsif ($savedusername eq "Guest" && $savedip ne $ipaddresstowo) {
print FILE "$line\n";
}
elsif ($savedusername ne "Guest") {
print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";
$memberprinted = "yes";
}
} else { print FILE "$line\n"; }
}
} # end foreach

if ($memberprinted eq "no") { print FILE "$tempusername|$currenttime|$where|$ipaddresstowo\n";}
close(FILE);

if ($method eq "$ibtxt{'0016'}") {

$filetoopen = "$ikondir" . "data/onlinedata.dat";
$filetoopen = &stripMETA($filetoopen);
open(FILE,"$filetoopen");
@onlinedata = <FILE>;
close(FILE);
foreach $line (@onlinedata) {
chomp $line;
($savedusername, $savedtime, $savedwhere, $savedipadr) = split(/\|/, $line);
$lookfor = substr($savedusername, 0, 5);
if ($lookfor eq "$ibtxt{'0043'}") { $guests++; }
else {
$members++;
$cleanmember = $savedusername;
$cleanmember =~ s/\_/ /g;
$savedusername = $cleanmember;
$savedusername = substr($savedusername,0,20) if length $savedusername > 19;
$memberoutput .= qq~&raquo; <a href="$profileprog?action=show&member=$cleanmember">$savedusername </a>~;
}
}
}
} # end routine
Автор: Marilda
Дата сообщения: 03.05.2003 16:36
All
Если Guest скачет быстро из одной темы в другую или разом открывает несколько окон, то в "кто он лайн" прописывает каждый раз нового гуеста. Возможно, вызвано это динамическим ip, наверное, ip с разными последними цифрами как разные ip воспринимает. Т. е., гостей завышенное кол-во кажет, что радует глаз, но не есть правильно. Никто не фиксил?
Автор: Shurik
Дата сообщения: 03.05.2003 22:14
Marilda
ничего такого скрипт не кажет, ибо скрипт вытаскаивает IP из окружающей переменной.

Код:
$ipaddresstowo = $ENV{'REMOTE_ADDR'};
Автор: Marilda
Дата сообщения: 03.05.2003 22:23
Shurik
Во-первых, в списке "Кто online" видела гуестей с ip, отличающимися последними цифрами. Во-вторых, сама зашла через модем как гуест, покликала темок и в списке вижу двух себя с моими ip с разными последними цифрами


Добавлено
Вообще мне кажется, когда прикручивала этот фикс, такого не было. С сервером, с их переменными может быть связано?
Автор: Shurik
Дата сообщения: 03.05.2003 22:48
Marilda

Цитата:
Во-первых, в списке "Кто online" видела гуестей с ip, отличающимися последними цифрами.

ну, раз последние цифры отличаются - то это конечно же разный IP. И теоретически это разные люди.

Цитата:
Во-вторых, сама зашла через модем как гуест, покликала темок и в списке вижу двух себя с моими ip с разными последними цифрами

Ты уверена, что все правильно сделала?
Ты какой код вставила? Тот, что я дал? Если да, то лично у меня все ок - смотрел файлик - там гости с разными IP. И я когда под гостем ходил - у меня только 1 ip был.
А вообще, IP дается только при подключении, так что не может у тебя меняться IP просто так...

Цитата:
Вообще мне кажется, когда прикручивала этот фикс, такого не было.

чего именно не было?

Цитата:
С сервером, с их переменными может быть связано?

вряд ли.
Автор: Marilda
Дата сообщения: 03.05.2003 23:09
Shurik
Вот хотела себя фейсом снова ткнуть в это же явление - хм, не вышло. Объясни мне,
Shurik, когда модем и динамический ip: одна сессия (один выход в инет) - один ip? Если так, то наверное, бывают в жизни совпаденья, другие Гости - это зашедшие через того же прова другие Гости.
Автор: Shurik
Дата сообщения: 04.05.2003 00:49
Marilda

Цитата:
Объясни мне,
Shurik, когда модем и динамический ip: одна сессия (один выход в инет) - один ip?

не совсем понял вопроса.
Но как я и говорил выше - когда ты подключаешься к инету через модем - тебе выделяется динамический IP. Динамический, это не значит, что он у тебя скакать во время подключения будет , а значит, что он будет будет выделяться тебе при подключении из какого-то диапазона (меняются последние числа в ip).
А тогда видать было совпадение... Особенно если ты подключена через крупного провайдера, то вероятность резко увеличивается.
Автор: Marilda
Дата сообщения: 04.05.2003 11:18
Shurik
Спасибо. Совпадения это. Зря я на фикс наехала. Иначе гости бы с каждой минутой накручивались, а этого нет.
Автор: ED9M
Дата сообщения: 02.01.2004 12:20
Спасибо вам за помощь ! Я был перенаправлен в вашу тему из своей новой по этому же вопросу ! А то так ведь интересно, сколько у меня гостей на форуме ! Теперь все заработало.
P.S. Если можно, то хотел бы посоветовать веб-мастерам, размещающим свои сайты на Valuehost, переехать на другой хостинг. Я лично переехал, т.к. Value - дауны по жизни !

Страницы: 12345

Предыдущая тема: Баг с Яваскриптом (javascript) во всех версиях IkonBoard


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.