#!/usr/bin/perl #!perl $| = 1; # declare the variables $boarddir = '../dat'; $boardurl = '/cgi-bin'; $cgi = '/cgi-bin/robboard.cgi'; $indexcgi = '/cgi-bin/index.cgi'; $queryswitch = '?'; $html = 1; # 0 = remove all html, 1 = show html as text, 2 = show html as html $datetype = 4; $useban = 0; $encrypt = 0; $style = 01; $threaded = 1; $fontface = 'arial'; $fontsize = 2; #$tablecolor1 = 'black'; #$tablecolor2 = 'white'; #$tablecolor3 = 'white'; #$fontcolor1 = 'white'; #$fontcolor2 = 'black'; #$fontcolor3 = 'black'; $tablecolor1 = 'white'; $tablecolor2 = 'blue'; $tablecolor3 = 'white'; $fontcolor1 = 'black'; $fontcolor2 = 'yellow'; $fontcolor3 = 'white'; ######################################################################### # Don't change anything below here unless you know what you're doing :) # ######################################################################### $datadir = "$boarddir/data"; $datafile = "$boarddir/data.txt"; $index_t = "$boarddir/index_t.html"; $page_t = "$boarddir/page_t.html"; $thread_t = "$boarddir/thread_t.html"; $numfile = "$boarddir/number.txt"; $banfile = "$boarddir/ban.txt"; #$pwdfile = "$boarddir/pwd.txt"; $pwdfile = "$boarddir/pass.cfg"; $use_cgi = 1; $LOCK_EX = 2; $LOCK_UN = 8; print "Content-type: text/html\n\n"; &get_date; &readform; &post if ($action eq 'post'); &display if ($action eq 'display'); &viewthread if ($action eq 'viewthread'); &admin if ($action eq 'admin'); &remove if ($action eq 'remove'); &remove2 if ($action eq 'remove2'); &ban if ($action eq 'ban'); &ban2 if ($action eq 'ban2'); &unban if ($action eq 'unban'); &unban2 if ($action eq 'unban2'); &password if ($action eq 'password'); &password2 if ($action eq 'password2'); &fatal_error("Эта страница вызвана некорректно. Попробуйте эту взамен."); sub post { &bancheck if ($useban == 1); $follow = $INFO{'follow'}; $name = $FORM{'name'}; $email = $FORM{'email'}; $subject = $FORM{'subject'}; $message = $FORM{'message'}; &post_error("Необходимое поле `Имя` не заполнено.") unless($name); &post_error("Необходимое поле `E-Mail` не заполнено.") unless($email); &post_error("Необходимое поле `Тема` не заполнено.") unless($subject); &post_error("Пустое сообщение.") unless($message); $name =~ s/`/\'/g; $email =~ s/`/\'/g; $message =~ s/`/\'/g; $subject =~ s/`/\'/g; $name =~ s/\&/\&/g; $email =~ s/\&/\&/g; $subject =~ s/\&/\&/g; $message =~ s/\&/\&/g; $name =~ s/"/\"/g; $email =~ s/"/\"/g; $subject =~ s/"/\"/g; $message =~ s/"/\"/g; $name =~ s/ / \ /g; $email =~ s/ / \ /g; $subject =~ s/ / \ /g; $message =~ s/ / \ /g; if ($html == 0) { $name =~ s/<([^>]|\n)*>//g; $email =~ s/<([^>]|\n)*>//g; $subject =~ s/<([^>]|\n)*>//g; $message =~ s/<([^>]|\n)*>//g; } elsif ($html == 1) { $name =~ s//>/g; $email =~ s//>/g; $subject =~ s//>/g; $message =~ s//>/g; } $message =~ s/\t/ \  \  \ /g; $message =~ s/\n\n/

\n\n/g; $message =~ s/\n/
\n/g; $message =~ s/\cM//g; open (FILE, "$numfile") || &fatal_error("Не могу открыть $numfile"); &lock(FILE); @info = ; &unlock(FILE); close(FILE); ($postnum,$chop) = split(/``/,$info[0]); $postnum++; open (FILE, ">$numfile") || &fatal_error("Не могу открыть $numfile"); &lock(FILE); print FILE "$postnum"; print FILE "``xx"; &unlock(FILE); close (FILE); open (FILE, "$datafile") || &fatal_error("Не могу открыть $datafile"); &lock(FILE); @messages = ; &unlock(FILE); close (FILE); open (FILE, ">$datafile") || &fatal_error("Не могу открыть $datafile"); &lock(FILE); if ($follow eq 'no') { print FILE "$postnum``$subject``1``$name``$email``$date``$ENV{REMOTE_ADDR}``$ENV{HTTP_USER_AGENT}``xx\n"; print FILE @messages; } else { $followto = $FORM{'followto'}; $level = $FORM{'level'} + 1; for ($a = 0; $a < @messages; $a++) { ($checknum,@junk) = split(/``/,$messages[$a]); print FILE "$messages[$a]"; if ($checknum == $followto) { $level = $junk[1] + 1; print FILE "$postnum``$subject``$level``$name``$email``$date``$ENV{REMOTE_ADDR}``$ENV{HTTP_USER_AGENT}``xx\n"; } } } &unlock(FILE); close(FILE); open(FILE, ">$datadir/$postnum\.txt") || &fatal_error("Не могу открыть $postnum\.txt"); &lock(FILE); print FILE $message; &unlock(FILE); close (FILE); print "\n"; print " Сообщение отправлено! \n"; print "\n"; print "

\n"; print "

Сообщение успешно сохранено

\n"; print "
\n"; print "Ваше сообщение, $subject, было сохранено.

\n"; if ($style == 0) { print "Просмотреть Ваше сообщение
\n"; print "На главную

\n"; } elsif ($threaded == 0) { print "На главную

\n"; } else { print "Просмотреть эту тему
\n"; print "На главную

\n"; } print "

\n"; print "
"; print "\n"; exit; } sub display { $viewnum = $INFO{'num'}; $viewnum = int ( $viewnum ); &fatal_error("Эта функция была вызвана некорректно. ( не пытались ли вы взломать сайт, не так ли? )") unless ($viewnum > 0); open (FILE, "$datafile") || &fatal_error("Не могу открыть $datafile"); &lock(FILE); @messages = ; &unlock(FILE); close(FILE); for ($a = 0; $a < @messages; $a++) { ($mnum[$a],$msub[$a],$mfollow[$a],$mname[$a],$memail[$a],$mdate[$a],$mip[$a],$mbrowser[$a],$chop) = split(/``/,$messages[$a]); if ($viewnum == $mnum[$a]) { $idnum = $a; } } open (FILE, "$datadir/$viewnum\.txt") || &fatal_error("Не могу открыть $viewnum\.txt"); &lock(FILE); @body = ; &unlock(FILE); close(FILE); open (FILE, "$page_t") || &fatal_error("Не могу открыть $page_t"); &lock(FILE); @template = ; &unlock(FILE); close(FILE); for ($a = 0; $a < @template; $a++) { $_ = $template[$a]; if (//) { print @body; } elsif (//) { print "
\n"; print "\n"; print "\n"; print "\n\n"; print "\n"; print "\n\n"; print "\n"; print "\n\n"; print "\n"; print "\n\n"; print "\n"; print "
Имя:
E-Mail:
Тема:
Сообщение:
"; print "\n"; print "\n"; print " "; print "
\n\n"; } elsif (//) { if ($mfollow[$idnum] >= $mfollow[$idnum+1]) { print "
Никто не ответил на это сообщение.
"; } else { print "
    \n"; $last = $mfollow[$idnum+1]; for ($d = $idnum+1; $d < @messages; $d++) { if ($mfollow[$d] <= $mfollow[$idnum]) { $d = @messages; $count = $last - $mfollow[$idnum]; } else { if ($mfollow[$d] > $last) { print "
      \n"; } elsif ($mfollow[$d] < $last) { for ($e = 0; $e < $last - $mfollow[$d]; $e++) { print "
    \n"; } } print "
  • \n"; print "$msub[$d] "; print "- $mname[$d], $mdate[$d]
  • \n"; } $last = $mfollow[$d]; } for ($b = 0; $b < $count; $b++) { print "
\n"; } } } elsif (//) { print "$msub[$idnum]\n"; } elsif (//) { print "$mname[$idnum]\n"; } elsif (//) { print "$mname[$idnum]\n"; } elsif (//) { print "$memail[$idnum]\n"; } elsif (//) { print "$mdate[$idnum]\n"; } elsif (//) { print "$mbrowser[$idnum]\n"; } elsif (//) { print "$mip[$idnum]\n"; } else { print "$_"; } } exit; } sub viewthread { $viewnum = $INFO{'num'}; $viewnum = int ( $viewnum ); &fatal_error("Эта функция была вызвана некорректно. ( не пытались ли вы взломать сайт, не так ли? )") unless ($viewnum > 0); open (FILE, "$datafile") || &fatal_error("Не могу открыть $datafile"); &lock(FILE); @messages = ; &unlock(FILE); close(FILE); for ($a = 0; $a < @messages; $a++) { ($mnum[$a],$msub[$a],$mfollow[$a],$mname[$a],$memail[$a],$mdate[$a],$mip[$a],$mbrowser[$a],$chop) = split(/``/,$messages[$a]); if ($viewnum == $mnum[$a]) { $idnum = $a; } } while ($mfollow[$idnum] > 1) { $idnum--; } $depth = 1; $messcount = -1; for ($a = $idnum+1; $a < @messages; $a++) { if ($mfollow[$a] == 1) { $messcount = $a - $idnum; $a = @messages; } elsif ($mfollow[$a] > $depth) { $depth = $mfollow[$a]; } } $messcount = @messages - $idnum if ($messcount == -1); open (FILE, "$thread_t") || &fatal_error("Не могу открыть $thread_t"); &lock(FILE); @template = ; &unlock(FILE); close(FILE); for ($a = 0; $a < @template; $a++) { $_ = $template[$a]; if (//) { for ($b = $idnum; $b < $idnum + $messcount; $b++) { print "\n"; open (FILE, "$datadir/$mnum[$b]\.txt") || &fatal_error("Не могу открыть $mnum[$b]\.txt"); &lock(FILE); @body = ; &unlock(FILE); close(FILE); $colspan = $depth - $mfollow[$b] + 2; $colspan2 = $colspan - 1; print ""; for ($c = 1; $c < $mfollow[$b]; $c++) { print "\n"; } print "\n"; print ""; for ($c = 1; $c < $mfollow[$b]; $c++) { print "\n"; } print "\n"; print "\n"; print ""; for ($c = 1; $c < $mfollow[$b]; $c++) { print "\n"; } print "\n"; print "\n"; print ""; for ($c = 1; $c < $mfollow[$b]; $c++) { print "\n"; } print "\n"; print "\n"; print ""; for ($c = 1; $c < $mfollow[$b]; $c++) { print "\n"; } print "\n"; print "\n"; print "
$mdate[$b]
Поместил:$mname[$b]
Тема:$msub[$b]
Сообщение:@body
Инфо:Ответить на это сообщение.
\n"; } } elsif (//) { print "
\n"; print "\n"; print "\n"; print "\n\n"; print "\n"; print "\n\n"; print "\n"; print "\n\n"; print "\n"; print "\n\n"; print "\n"; print "
Имя:
E-Mail:
Тема:
Сообщение:
"; print "\n"; print "\n"; print " "; print "
\n\n"; } elsif (//) { print "$msub[$idnum]\n"; } elsif (//) { print "$mname[$idnum]\n"; } elsif (//) { print "$mname[$idnum]\n"; } elsif (//) { print "$memail[$idnum]\n"; } elsif (//) { print "$mdate[$idnum]\n"; } elsif (//) { print "$mbrowser[$idnum]\n"; } elsif (//) { print "$mip[$idnum]\n"; } else { print "$_"; } } exit; } sub bancheck { open (FILE, "$banfile") || &fatal_error("Не могу открыть $banfile"); &lock(FILE); @banlist = ; &unlock(FILE); close(FILE); ($this1,$this2,$this3,$this4) = split(/\./,$ENV{REMOTE_ADDR}); for ($x = 0; $x < @banlist; $x++) { ($ip1,$ip2,$ip3,$ip4,$chop) = split(/``/,$banlist[$x]); if ( ("$this1" eq "$ip1" && "$this2" eq "$ip2" && "$this3" eq "$ip3" && "$this4" eq "$ip4") || ("$this1" eq "$ip1" && "$this2" eq "$ip2" && "$this3" eq "$ip3" && "$ip4" eq 'X') || ("$this1" eq "$ip1" && "$this2" eq "$ip2" && "$ip3" eq 'X') || ("$this1" eq "$ip1" && "$ip2" eq 'X') ) { &fatal_error("Вы не можете поместить это сообщение. Ваш IP запрещен."); } } } sub admin { print "\n"; print " Администрирование \n"; print "\n"; print "
\n"; print "

Администрирование

\n"; print "Давай поадминим!

\n"; print "Удалить сообщения
\n"; # print "Запретить пользователя
\n"; # print "Разрешить пользователя
\n"; print "Сменить пароль

\n"; # print "\n"; # # print "\n\n"; # # print "\n"; # print "\n"; # print "\n\n"; # # print "\n"; # print "\n"; # print "\n"; # print "\n"; # # print "\n"; # print "\n"; # print "\n"; # print "\n"; # # print "\n"; # print "\n"; # print "\n"; # print ""; # # print "\n"; # # print "\n"; # print "\n"; # print "\n"; # print "\n"; # # print "\n"; # # print "
Настройки
ПеременнаяЗначениеПримечание
\$useban$useban"; # # if ($useban == 1) { # print "Пользователи с этими IP в запр. списке не смогут писать в форум."; # } else { # print "Список запрета не используется. В форум могут писать все."; # } # # print "
\$html$html"; # # if ($html == 0) { # # print "Все теги HTML удаляются из сообщений."; # # } elsif ($html == 1) { # # print "Теги HTML выводятся простым текстом."; # # } else { # # print "Теги HTML включены (возможны неприятности)."; # # } # # print "
\$datetype$datetypeПример: $date
\$encrypt$encrypt"; # # if ($encrypt == 1) { # print "Пароль шифруется."; # } else { # print "Пароль не зашифрован."; # } # # print "
"; # print "Эти переменные могут быть изменены в robboard.cgi

\n"; print "или...

\n"; print "Назад к доске сообщений
\n"; print "

\n"; print "\n"; exit; } sub remove { open (FILE, "$datafile") || &fatal_error("Не могу открыть $datafile"); &lock(FILE); @messages = ; &unlock(FILE); close(FILE); for ($a = 0; $a < @messages; $a++) { ($mnum[$a],$msub[$a],$mfollow[$a],$mname[$a],$memail[$a],$mdate[$a],$mip[$a],$mbrowser[$a],$chop) = split(/``/,$messages[$a]); if ($viewnum == $mnum[$a]) { $idnum = $a; } } print "\n"; print " Удаление сообщений \n"; print "\n"; print "
\n"; print "

Удаление сообщений

\n"; print "
\n\n"; print "Пароль:

\n"; print "\n\n"; print "\n"; for ($a = 0; $a < @messages; $a++) { print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; } print "
УдалитьСохранитьНомерСообщениеДата
$mnum[$a]$msub[$a]$mdate[$a]
\n"; print "\n"; print "\n"; print "\n"; print "

\n"; print "
\n"; print "\n"; exit; } sub remove2 { &checkpass; $something = 0; $delcounter = 0; for ($x = 0; $x < $FORM{'total'}; $x++) { $okiedokie[$x] = $FORM{"line$x"}; $something = 1 if ($okiedokie[$x] eq "yes"); } if ($something == 1) { open (FILE, "$datafile") || &fatal_error("Не могу открыть $datafile"); &lock(FILE); @messages = ; &unlock(FILE); close(FILE); for ($a = 0; $a < @messages; $a++) { ($mnum[$a],$msub[$a],$mfollow[$a],$mname[$a],$memail[$a],$mdate[$a],$mip[$a],$mbrowser[$a],$chop) = split(/``/,$messages[$a]); } open (FILE, ">$datafile") || &fatal_error("Не могу открыть $datafile"); &lock(FILE); for ($x = 0; $x < @messages; $x++) { if ($okiedokie[$x] eq 'yes') { $y = $x; while ( $x==$y || ( $mnum[$x] > $mnum[$y] && $x < @messages ) ) { unlink("$datadir/$mnum[$x]\.txt"); $delcounter++; $x++; } $x--; } else { print FILE $messages[$x]; } } &unlock (FILE); close (FILE); } print "\n"; print " Удаление сообщений \n"; print "\n"; print "
\n"; print "

Удаление сообщений

\n"; print "$delcounter сообщений(е,я) удалено.

\n\n"; print "Админ
\n"; print "Назад к доске сообщений\n\n"; print "

\n"; print "\n"; exit; } sub ban { print "\n"; print " Запрещение пользователей \n"; print "\n"; print "
\n"; print "

RobBoard - Ban a User

\n"; print "
\n\n"; print "Пароль:

\n"; print "Заретить IP

\n"; print " .\n"; print " .\n"; print " .\n"; print "

\n"; print "\n"; print "\n"; print "

\n"; print "\n"; print "
\n"; print "Введите IP, который вы хотите запретить в текстовые поля. Вы можете запретить диапазон\n"; print "IP адресов введя один прописной X в поле. Например, введите\n"; print "123 234 345 123 для блокирования IP 123.234.345.123, или ввдетите\n"; print "123 234 345 X, чтобы блокировать 123.234.345.* - все IP адреса, которые начинаются с 123 234 345\n"; print ". Аналогично, 123 234 X блокирует 123.234.*.* . Вы также можете блокировать людей редактируя файл ban.txt\n"; print "вручную, но будте осторожны. Если вы не уверены в том, как в ban.txt\n"; print "хранятся данные, воспользуйтесь лучше этой формой.\n"; print "

\n"; print "

\n"; print "\n"; exit; } sub ban2 { &checkpass; open (FILE, ">>$banfile") || &fatal_error("Не могу открыть $banfile"); &lock(FILE); print FILE "$FORM{'box1'}``$FORM{'box2'}``$FORM{'box3'}``$FORM{'box4'}``xx\n"; &unlock(FILE); close(FILE); print "\n"; print " Запрещение пользователей \n"; print "\n"; print "
\n"; print "

Запрещение пользователей

\n"; print "$FORM{'box1'}\.$FORM{'box2'}\.$FORM{'box3'}\.$FORM{'box4'} has been added to the ban list.

\n\n"; print "Админ
\n"; print "Назад к доске сообщений\n\n"; print "

\n"; print "\n"; exit; } sub unban { open (FILE, "$banfile") || &fatal_error("Не могу открыть $banfile"); &lock(FILE); @banlist = ; &unlock(FILE); close(FILE); print "\n"; print " Разблокирование пользователей \n"; print "\n"; print "
\n"; print "

Разблокирование пользвателей

\n"; print "
\n\n"; print "Пароль:

\n"; print "\n"; print "\n"; for ($x = 0; $x < @banlist; $x++) { ($ip1,$ip2,$ip3,$ip4,$chop) = split(/``/,$banlist[$x]); print "\n"; print "\n"; print "\n"; } print "
Удалить из спискаСохранить в спискеIP
$ip1\.$ip2\.$ip3\.$ip4
\n\n"; print "\n"; print "\n"; print "\n"; print "

\n\n"; print "
\n"; print "\n"; exit; } sub unban2 { &checkpass; $something = 0; $delcounter = 0; for ($x = 0; $x < $FORM{'total'}; $x++) { $okiedokie[$x] = $FORM{"line$x"}; $something = 1 if ($okiedokie[$x] eq "yes"); } if ($something == 1) { open (FILE, "$banfile") || &fatal_error("Не могу открыть $banfile"); &lock(FILE); @banlist = ; &unlock(FILE); close(FILE); open (FILE, ">$banfile") || &fatal_error("Не могу открыть $banfile"); &lock(FILE); for ($x = 0; $x < @banlist; $x++) { if ($okiedokie[$x] eq 'yes') { $delcounter++; } else { print FILE $banlist[$x]; } } &unlock(FILE); close (FILE); } print "\n"; print " Разблокирование пользователей \n"; print "\n"; print "
\n"; print "

Разблокирование пользователей

\n"; print "$delcounter вхождение(й) было удалено из списка.

\n\n"; print "Админ
\n"; print "Назад в форум\n\n"; print "

\n"; print "\n"; exit; } sub password { print "\n"; print " Изменение пароля \n"; print "\n"; print "
\n"; print "

Изменение пароля

\n"; print "
\n\n"; print "\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
Текущий пароль:
Новый пароль:
Подтверждение пароля:
\n\n"; print "\n"; print "\n"; print "
\n"; print "
\n"; print "\n"; exit; } sub password2 { &checkpass; &fatal_error("Пароли не совпадают") if ($FORM{'new1'} ne $FORM{'new2'}); &fatal_error("Новый пароль не введен") unless ($FORM{'new1'}); open(FILE, "$pwdfile") || &fatal_error("Can't find $pwdfile"); @lines = ; close(FILE); ($p, $nochop) = split(/``/,$lines[0]); ($p2, $nochop) = split(/``/,$lines[1]); if ($encrypt == 1) { $new = crypt($FORM{'new1'}, substr($p, 0, 2)); } else { $new = $FORM{'new1'}; } open (FILE, ">$pwdfile") || &fatal_error("Не могу найти $pwdfile"); if ($encrypt == 1) { print FILE "$new``xx\n"; print FILE "$p2``xx"; } else { print FILE "$p``xx\n"; print FILE "$new``xx"; } close (FILE); print "\n"; print " Изменение пароля \n"; print "\n"; print "
\n"; print "

Изменение пароля

\n"; print "Пароль успешно изменен.

\n"; print "Админ
\n"; #print "Назад в форум\n\n"; print "

\n"; print "\n"; exit; } sub checkpass { open(FILE, "$pwdfile") || &fatal_error("Не могу найти $pwdfile"); @lines = ; close(FILE); ($p, $nochop) = split(/``/,$lines[0]); ($p2, $nochop) = split(/``/,$lines[1]); &fatal_error("Неверный пароль") if ($p ne crypt($FORM{'pass'}, substr($p, 0, 2)) && $encrypt == 1); &fatal_error("Неверный пароль") if ($p2 ne $FORM{'pass'} && $encrypt != 1); } sub post_error { local($e) = @_; print "\n"; print " Ошибка размещения \n"; print "\n"; print "
\n"; print "

Ошибка размещения

\n"; print "
\n"; print "Ошибка размещения вашего сообщения:

\n"; print "$e

\n\n"; print "Вы можете нажать кнопку 'Назад' вашго обозревателя, чтобы исправить ошибку.

\n"; print "На главную

\n"; print "

\n"; print "
"; print "
\n"; exit; } sub fatal_error { local($e) = @_; print "\n"; print " Фатальная ошибка \n"; print "\n"; print "
\n"; print "

Фатальная ошибка

\n"; print "
\n"; print "Произошла неисправимая ошибка:

\n"; print "$e

\n\n"; print "Если эта ошибка повториться, свяжитесь с администратором.

\n"; print "На главную

\n"; print "

\n"; print "
"; print "
\n"; exit; } sub readform { read(STDIN, $input, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $input); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } @vars = split(/&/, $ENV{QUERY_STRING}); foreach $var (@vars) { ($v,$i) = split(/=/, $var); $v =~ tr/+/ /; $v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $i =~ tr/+/ /; $i =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $i =~ s///g; $INFO{$v} = $i; } $action = $INFO{'action'}; } sub get_date { @days = ('Воскресенье','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота'); @months = ('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $mon_num = $mon+1; $savehour = $hour; $hour = "0$hour" if ($hour < 10); $min = "0$min" if ($min < 10); $sec = "0$sec" if ($sec < 10); $saveyear = ($year % 100); $year = 1900 + $year; if ($datetype == 1) { $date = "$days[$wday], $months[$mon] $mday, $year в $hour\:$min\:$sec"; } elsif ($datetype == 2) { $date = "$months[$mon] $mday, $year в $hour\:$min\:$sec"; } elsif ($datetype == 3) { $xxx3 = substr($months[$mon],1,3); $date = "$xxx3\. $mday, $year - $hour\:$min\:$sec"; } elsif ($datetype == 4) { $mon_num = "0$mon_num" if ($mon_num < 10); $mday = "0$mday" if ($mday < 10); $saveyear = "0$saveyear" if ($saveyear < 10); $date = "$mday-$mon_num-$saveyear - $hour\:$min\:$sec"; } } sub lock { local($file)=@_; flock($file, $LOCK_EX); } sub unlock { local($file)=@_; flock($file, $LOCK_UN); }