Alexander Ipp
BANNED | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Итак, как известно, IB снабжена уродливой системой хранения мемберов - файлы, название которых = имямембера+.cgi Это не даёт возможности в полной мере использовать различные символы в никах, а аткже создаёт проблемы с русскими никами. Решил тут поправтьь это. Имеем: Файл listofmembers.cgi формата: $memberfilenumber{'AI'} = "0001"; $memberfilenumber{'AlexanderIpp'} = "0002"; $memberfilenumber{'Flex'} = "0003"; $memberfilenumber{'Guest'} = "0004"; $memberfilenumber{'TestAdmin'} = "0005"; $memberfilenumber{'Tester'} = "0006"; $memberfilenumber{'Tester2'} = "0007"; $memberfilenumber{'TestFlooder'} = "0008"; $memberfilenumber{'TestMember'} = "0009"; $memberfilenumber{'TesterNew'} = "0010"; Файл nextmembernumber.cgi содержания: $nextmembernumber = "0010"; В принципе, нулей можно и поболее сделать, если надо. И файлы мемберов с низваниями 0001.cgi и т.п. Подпрограмма getmember в ikon.lib: Код: ########################## # Get member info. sub getmember { my $nametocheck = shift; $nametocheck =~ s/ /\_/g; require "$ikondir" . "members/listofmembers.cgi"; $memberfiletoopennumber = $memberfilenumber{$nametocheck}; $filetoopen = "$ikondir" . "members/$memberfiletoopennumber.cgi"; $filetoopen = &stripMETA($filetoopen); if (-e $filetoopen) { open(FILE,"$filetoopen"); $filedata = <FILE>; close(FILE); chomp($filedata); ($membername, $password, $membertitle, $membercode, $numberofposts, $emailaddress, $showemail, $ipaddress, $homepage, $aolname, $icqnumber ,$location ,$interests, $joineddate, $lastpostdate, $signature, $timedifference, $privateforums, $useravatar, $rating, $misc1, $misc2, $misc3) = split(/\|/,$filedata); chomp $privateforums; if($privateforums) { @private = split(/&/,$privateforums); foreach $accessallowed (@private) { chomp $accessallowed; ($access, $value) = split(/=/,$accessallowed); $allowedentry{$access} = $value; } } } else { $userregistered = "no"; } } | В скриптах, в тех местах, где идёт запись в файлы мемберов имеем: Код: require "$ikondir" . "members/listofmembers.cgi"; $memberfiletoopennumber = $memberfilenumber{$cleanmembername}; $filetomake = "$ikondir" . "members/$memberfiletoopennumber.cgi"; $filetomake = &stripMETA($filetomake); open(FILE, ">$filetomake"); #####flock(FILE, 2); print FILE "$inmembername|$password|$membertitle|$membercode|$numberofposts|$emailaddress|$showemail|$ipaddress|$homepage|$aolname|$icqnumber|$location|$interests|$joineddate|$lastpostdate|$signature|$timedifference|$privateforums|$useravatar|$rating|$misc1|$misc2|$misc3"; close(FILE); | Или аналогично. В register.cgi имеем: Код: require "members/nextmembernumber.cgi"; $memberfiletitle = $inmembername; $memberfiletitle =~ y/ /_/; $filetomake = "$ikondir" . "members/$nextmembernumber.cgi"; open(FILE, ">$filetomake"); ##flock(FILE, 2); print FILE "$inmembername|$password|$membertitle|$membercode|$numberofposts|$emailaddress|$showemail|$ipaddress|$homepage|$aolname|$icqnumber|$location|$interests|$joineddate|$lastpostdate|$signature|$timedifference|$privateforums|$useravatar|0|$misc1|$misc2|$misc3"; close(FILE); open (FILE, ">>$ikondir" . "members/listofmembers.cgi"); ##flock(FILE, 2); print FILE "\$memberfilenumber\{\'$inmembername\'\} \= \"$nextmembernumber\"\;\n"; close (FILE); $nextmembernumbernew = $nextmembernumber + 1; open(NOMFILE, "members/nextmembernumber.cgi" ); #flock(NOMFILE, 2 ); print NOMFILE "\$nextmembernumber \= \"$nextmembernumbernew\"\;"; close(NOMFILE); $inmembername =~ y/_/ /; | Надеюсь, не надо пояснять, где? Те, кому надо - плиз, почитайте пока другую ветку. ;) И тут мы имеем гимор - скрипт setmembers.cgi. Вот здесь всёи встало. Вот его код. Думаю, поместить эту простыню здесь удобнее, если модераторы так не считают - пусть снесут, я выложу в виде файла. Код: Сейчас главный гимор у меня с куском, помеченным жирным шрифтом. Всё бы ничего, но как бы разобрать строки файла со списком мемберов? И вытащить ник в переменную... PS Оригинальный код того фрагмента - в виде комментариев... Преимущественно в тему приглашаются batva, DimoN, Ausw, pechlny и др., прилично знающие Перл. Для тех, кто мало чего умеет, я потом опишу всё это как положено. PPS Потом можно бы наваять конвертор, хотя, наверное, с этим я и сам справлюсь. ;) Добавлено Кстати, рег мемберов сейчас идёт нормально. ;) |