// WR-forum v 1.9.9 // 20.07.12 г. // Miha-ingener@yandex.ru
error_reporting(0); // РАЗКОМЕНТИРУЙТЕ для постоянной работы
//error_reporting (E_ALL); // ВРЕМЕННО - на время тестирования и отладки скрипта
@ini_set('register_globals','off');// Все скрипты написаны для этой настройки php
include "config.php";
// Определяем URL форума
$host=$_SERVER["HTTP_HOST"]; $self=$_SERVER["PHP_SELF"]; $furl=str_replace('index.php','',"http://$host$self");
$valid_types=array("zip","rar","doc","xls","7z","jpg","jpeg","bmp","gif","png"); // допустимые расширения загружаемых файлов
function replacer ($text) { // ФУНКЦИЯ очистки кода
$text=str_replace(" ",' ',$text);
$text=str_replace(">",'>',$text);
$text=str_replace("<",'<',$text);
$text=str_replace("\"",'"',$text);
$text=preg_replace("/\n\n/",'
',$text);
$text=preg_replace("/\n/",' ',$text);
$text=preg_replace("/\\\$/",'$',$text);
$text=preg_replace("/\r/",'',$text);
$text=preg_replace("/\\\/",'\',$text);
// если magic_quotes включена - чистим везде СЛЭШи в этих случаях: одиночные (') и двойные кавычки ("), обратный слеш (\)
if (get_magic_quotes_gpc()) { $text=str_replace("\"",'"',$text); $text=str_replace("\'",'\'',$text); $text=str_replace("\\",'\',$text); }
$text=str_replace("\r\n"," ",$text);
$text=str_replace("\n\n",'
',$text);
$text=str_replace("\n",' ',$text);
$text=str_replace("\t",'',$text);
$text=str_replace("\r",'',$text);
$text=str_replace(' ',' ',$text);
return $text; }
// Функция содержит ПРОДОЛЖЕНИЕ ШАПКИ. Вызывается: addtop();
function addtop() { global $wrfname,$fskin,$date,$time;
// ищем КУКи и выводим ИМЯ
if (isset($_COOKIE['wrfcookies'])) {$wrfc=$_COOKIE['wrfcookies']; $wrfc=replacer($wrfc); $wrfc=explode("|", $wrfc); $wrfname=$wrfc[0];} else {unset($wrfname); unset($wrfpass); $wrfpass="";}
echo'
';
if (isset($wrfname)) {print "Ваш профильВыход [$wrfname]";
$name=strtolower($wrfname); if (is_file("data-pm/$name.dat")) {$linespm=file("data-pm/$name.dat"); $pmi=count($linespm); print" [Есть сообщения в ПМ: $pmi шт.]";}
}
if (!isset($_COOKIE['wrfcookies']) and !isset($_GET['id'])) {print "Регистрация Вход
";}
if (is_file("$fskin/tiptop.html")) include("$fskin/tiptop.html"); // подключаем дополнение к ВЕРХУШКе
print"Сегодня: $date - $time";
return true;}
function prcmp ($a, $b) {if ($a==$b) return 0; if ($a<$b) return -1; return 1;} // Функция сортировки
function nospam() { global $max_key,$rand_key; // Функция АНТИСПАМ 2011 !
if (array_key_exists("image", $_REQUEST)) { $num=replacer($_REQUEST["image"]);
for ($i=0; $i<10; $i++) {if (md5("$i+$rand_key")==$num) {imgwr($st,$i); die();}} }
$xkey=""; mt_srand(time()+(double)microtime()*1000000);
$dopkod=mktime(0,0,0,date("m"),date("d"),date("Y")); // доп.код: меняется каждые 24 часа
$stime=md5("$dopkod+$rand_key");// доп.код
echo'
Защитный код:
';
$nummax=0; for ($i=0; $i<=$max_key; $i++) {
$snum[$i]=mt_rand(0,9); $psnum=md5($snum[$i]+$rand_key+$dopkod);
$secret=mt_rand(0,1); $styles='bgcolor=#EEEEEE';
if ($nummax<3) { if ($secret==1 or $i==0) {$styles='bgcolor=#FFFF00'; $xkey=$xkey.$snum[$i]; $nummax++;}}
echo "
\n
\r\n";}
$xkey=md5("$xkey+$rand_key+$dopkod"); //число + ключ из config.php + код меняющийся кажые 24 часа
print"
(введите цифры, которые на жёлтом фоне)
";
return; }
function addmsg($qm) { // ФУНКЦИЯ добавления темы/сообщения
global $wrfname,$maxname,$canupfile,$antispam,$max_key,$rand_key,$max_upfile_size,$smile,$smiles,$valid_types,$datadir;
//Проверка ЗАПРЕТА IP-пользователя на добавление объявлений (файл bad_ip.dat)
$ip=$_SERVER['REMOTE_ADDR']; // определяем IP юзера
if (is_file("$datadir/bad_ip.dat")) { $lines=file("$datadir/bad_ip.dat"); $i=count($lines);
if ($i>0) {do {$i--; $idt=explode("|", $lines[$i]);
if ($idt[0]===$ip) exit("
Админитратор заблокировал для Вашего IP: $ip возможность добавлять что-либо по следующей причине:
$idt[1].
Вам разрешено просматривать сообщения, а вот ДОБАВЛЯТЬ ТЕМЫ/СООБЩЕНИЯ категорически ЗАПРЕЩЕНО!
";
if ($canupfile==TRUE and isset($wrfname)) { $max=round($max_upfile_size/10.24)/100;
print "
Добавление ";
foreach($valid_types as $v) print "$v, ";
print" максимально допустимый размер: $max Кб.
";}
if ($antispam==TRUE and !isset($wrfname)) nospam(); // АНТИСПАМ !
echo'
';
return;} // КОНЕЦ функции-формы ДОБАВЛЕНИЯ ТЕМЫ/ОТВЕТА
// Выбран ВЫХОД из форума - очищаем куки
if(isset($_GET['event'])) {if ($_GET['event']=="clearcooke") {setcookie("wrfcookies","",time()); Header("Location: $furl"); exit;}}
// ДОБАВЛЕНИЕ ТЕМЫ или ОТВЕТА - ШАГ 1
if(isset($_GET['event'])) {
//Проверка ЗАПРЕТА IP-пользователя на добавление объявлений (файл bad_ip.dat)
$ip=$_SERVER['REMOTE_ADDR']; // определяем IP юзера
if (is_file("$datadir/bad_ip.dat")) { $lines=file("$datadir/bad_ip.dat"); $i=count($lines);
if ($i>0) {do {$i--; $idt=explode("|", $lines[$i]);
if ($idt[0]===$ip) exit("
Админитратор заблокировал для Вашего IP: $ip возможность добавлять что-либо по следующей причине:
$idt[1].
Вам разрешено просматривать сообщения, а вот ДОБАВЛЯТЬ ТЕМЫ/СООБЩЕНИЯ категорически ЗАПРЕЩЕНО!
");
} while($i > "1");} unset($lines);}
if ($stop==TRUE) exit("Временно добавление тем и сообщений приостановлено!");
if (($_GET['event']=="addtopic") or ($_GET['event']=="addanswer")) {
if (isset($_POST['name'])) $name=$_POST['name'];
$name=trim($name); // Вырезает ПРОБЕЛьные символы
$zag=$_POST['zag']; $msg=$_POST['msg'];
$fid=$_GET['id'];
if ($_GET['event']=="addanswer") $id=substr($fid,3,4);
if (strlen($fid)>3) $fid=substr($fid,0,3);
if (isset($_POST['who'])) $who=$_POST['who']; else $who="";
if (isset($_POST['email'])) $email=$_POST['email']; else $email="";
if (isset($_POST['page'])) $page=$_POST['page'];
if (isset($_POST['maxzd'])) $maxzd=$_POST['maxzd']; else $maxzd="0"; if ($maxzd==null) $maxzd="0";
if ((!ctype_digit($maxzd)) or (strlen($maxzd)>2)) exit("$back. Попытка взлома по звёздам или ошибка в файле статистики");
if ($nosssilki==TRUE and $_GET['event']=="addanswer" and preg_match("/href|url|http|www|\.ru|\.com|\.net|\.info|\.org/i",$msg) and preg_match("/\.jpg|\.gif|\.jpeg|\.png/is",$msg)<>TRUE and !isset($wrfname)) exit("
Уважаемый гость с IP $ip , если Вы хотите делиться ссылками с другими пользователями форума - пройдите регистрацию. Если Вы спаммер - выйдете вон!
");
// защита по топику fid
if (!ctype_digit($fid) or strlen($fid)>3) exit("$back. Попытка взлома через номер рубрики. Номер должен содержать только цифры и быть менее 4 символов");
//--А-Н-Т-И-С-П-А-М--проверка кода--
if ($antispam==TRUE and !isset($_COOKIE['wrfcookies'])) {
if (!isset($_POST['usernum']) or !isset($_POST['xkey']) or !isset($_POST['stime']) ) exit("данные из формы не поступили!");
$usernum=replacer($_POST['usernum']); $xkey=replacer($_POST['xkey']); $stime=replacer($_POST['stime']);
$dopkod=mktime(0,0,0,date("m"),date("d"),date("Y")); // доп.код. Меняется каждые 24 часа
$usertime=md5("$dopkod+$rand_key");// доп.код
$userkey=md5("$usernum+$rand_key+$dopkod");
if (($usertime!=$stime) or ($userkey!=$xkey)) exit("введён ОШИБОЧНЫЙ код!");}
// проходим по всем разделам и топикам - ищем запращиваемый
// на тот случай, если mainforum.dat - пуст, подключаем резервную копию
$realbase="1"; if (is_file("$datadir/mainforum.dat")) $mainlines=file("$datadir/mainforum.dat");
if (!isset($mainlines)) $datasize=0; else $datasize=sizeof($mainlines);
if ($datasize<=0) {if (is_file("$datadir/copy.dat")) {$realbase="0"; $mainlines=file("$datadir/copy.dat"); $datasize=sizeof($mainlines);}}
if ($datasize<=0) exit("$back. Проблемы с Базой данных, файл данных пуст - обратитесь к администратору");
$i=count($mainlines);
$realfid=null; $fotodetali="|||";
do {$i--; $dt=explode("|", $mainlines[$i]);
if ($dt[0]==$fid) {$realfid=$i; if ($dt[1]=="razdel") exit("$back. Данной ветки форума не существует");} // присваиваем $realfid - № п/п строки
} while($i>0);
if (!isset($realfid)) exit("$back. Ошибка с номером рубрики. Она не существует в базе");
$dt=explode("|",$mainlines[$realfid]);
if (is_file("$datadir/topic$fid.dat")) {$tlines=file("$datadir/topic$fid.dat"); $tc=count($tlines)-2; $i=$tc+2; $ok=null;
// нужно пробежаться по топику, найти тему. Если есть - нормуль, нету - значит добавление сообщений ЗАПРЕЩЕНО!
if ($_GET['event']=="addanswer") {
do {$i--; $tdt=explode("|", $tlines[$i]);
if ($tdt[7]=="$fid$id") {$ok=1; if ($tdt[8]=="closed") exit("$back тема закрыта и добавление сообщений запрещено!"); }
} while($i>0);
if ($ok!=1) exit("$back тема закрыта и добавление сообщений запрещено!"); }
} else $tc="2";
if ($dt[11]>0) {if ($tc>=$dt[11]) exit("$back. Превышено ограничение на кол-во допустимых тем в данной рубрике! Не более $dt[11] тем!");}
// проверка Логина/Пароля юзера. Может он хакер, тогда облом ему
// Этап 1
if (isset($_POST['userpass'])) $userpass=replacer($_POST['userpass']); // получаем и обрабатываем пароль юзера из файлов
else $userpass="";
$realname="";
if (isset($_COOKIE['wrfcookies'])) {
$wrfc=$_COOKIE['wrfcookies']; $wrfc=htmlspecialchars($wrfc); $wrfc=stripslashes($wrfc);
$wrfc=explode("|", $wrfc); $wrfname=$wrfc[0]; $wrfpass=$wrfc[1];
} else {$who=null; $wrfname=null; $wrfpass=null;}
// Этап 2
if ($who!=null) { $who=0; $ok=FALSE;
if ($wrfname!=null & $wrfpass!=null) {
$lines=file("$datadir/usersdat.php"); $i=count($lines);
do {$i--; $rdt=explode("|", $lines[$i]);
if (isset($rdt[1])) { $realname=strtolower($rdt[0]);
if (strtolower($wrfname)===$realname & $wrfpass===$rdt[1] & $userpass===$rdt[1]) {
$name=$wrfname; $who="да"; $ok="$i";}}
} while($i > "1");
if ($ok==FALSE) {setcookie("wrfcookies","",time()); exit("Ошибка при работе с КУКИ! Вы не сможете оставить сообщение, попробуйте подать его как гость. Ваш логин и пароль не найдены в базе данных, попробуйте зайти на форум вновь. Если ошибка повторяется - обратитесь к администратору форума.");}
}}
print"";
if ($_GET['event']=="addtopic" and $cangutema==FALSE and !isset($wrfname)) exit("
Администратор запретил гостям создавать темы!
");
if ($_GET['event']=="addanswer" and $cangumsg==FALSE and !isset($wrfname)) exit("
Администратор запретил гостям отвечать в темах!
");
if (isset($_FILES['file']['name'])) { // ЕСЛИ ДОБАВЛЯЕМ ФАЙЛ
$fotoname=replacer($_FILES['file']['name']); if (strlen($fotoname)>3) { $fotosize=$_FILES['file']['size']; // Имя и размер файла
//---- ЗАЩИТЫ от ВЗЛОМА -----
// 1. Проверяем РАСШИРЕНИЕ
$ext = strtolower(substr($fotoname, 1 + strrpos($fotoname, ".")));
if (!in_array($ext, $valid_types)) {echo "ФАЙЛ НЕ загружен. Возможные причины:
- разрешена загрузка только файлов с такими расширениями: ";
$patern=""; foreach($valid_types as $v) print"$v, ";
echo'
- Вы пытаетесь загрузить файл с двойным расширением;
- неверно введён адрес или выбран испорченный файл; '; exit;}
// 2. считаем КОЛ-ВО ТОЧЕК в выражении - если большей одной - СВОБОДЕН!
$findtchka=substr_count($fotoname, "."); if ($findtchka>1) exit("ТОЧКА встречается в имени файла $findtchka раз(а). Это ЗАПРЕЩЕНО! \r\n");
// 2. если в имени есть .php, .html, .htm - свободен!
$bag="Извините, но в имени ФАйла запрещено использовать .php, .html, .htm";
if (preg_match("/\.php/i",$fotoname)) exit("Вхождение .php найдено. $bag");
if (preg_match("/\.html/i",$fotoname)) exit("Вхождение .html найдено. $bag");
if (preg_match("/\.htm/i",$fotoname)) exit("Вхождение .htm найдено. $bag");
// 3. защищаем от РУССКИХ букв в имени файла и проверка РАСШИРЕНИЯ файла
$patern=""; foreach($valid_types as $v) $patern.="$v|";
if (!preg_match("/^[a-z0-9\.\-_]+\.(".$patern.")+$/is",$fotoname)) exit("$fotoname - Запрещено использовать РУССКИЕ буквы в имени файла, а также запрещено загружать файлы с расширением отличным от заданных!!");
// 4. Проверяем, может быть файл с таким именем уже есть на сервере
if (file_exists("$filedir/$fotoname")) exit("$back. Файл с таким именем уже существует на сервере! Либо измените имя на другое, либо обновите страницу - возможно Вы пытаетесь добавить сообщение и файл повторно!!");
// 5. Размер файла
$fotoksize=round($fotosize/10.24)/100; // размер ЗАГРУЖАЕМОГО файла в Кб.
$fotomax=round($max_upfile_size/10.24)/100; // максимальный размер файла в Кб.
if ($fotoksize>$fotomax) exit("Вы превысили допустимый размер файла! Максимально допустимый размер: $fotomax Кб. Вы пытаетесь загрузить файл размером: $fotoksize Кб!");
// ЕСЛИ включен порядок присвоения файлу случайного имени при загрузке - генерируем случайное имя
if ($random_name==TRUE) {do $key=mt_rand(100000,999999); while (file_exists("$filedir/$key.$ext")); $fotoname="$key.$ext";}
if (copy($_FILES['file']['tmp_name'], $filedir."/".$fotoname)) {print "
Файл УСПЕШНО загружен: $fotoname (Размер: $fotosize байт)"; $fotodetali="1|$fotoname|$fotosize|";}
else echo "ОШИБКА загрузки файла - $fotoname...\n"; }}
$tektime=time();
$name=wordwrap($name,30,' ',1); // разрываем длинные строки
$zag=wordwrap($zag,50,' ',1);
$name=str_replace("|","I",$name);
$who=str_replace("|","|",$who);
$email=str_replace("|","|",$email);
$zag=str_replace("|","|",$zag);
$msg=str_replace("|","|",$msg);
$smname=$name; if (strlen($name)>18) {$smname=substr($name,0,18); $smname.="..";}
$smzag=$zag; if (strlen($zag)>24) {$smzag=substr($zag,0,24); $smzag.="..";}
// БЛОК ГЕНЕРИРУЕТ СЛЕДУЮЩИЙ ПО ПОРЯДКУ НОМЕР ТЕМЫ, начиная просмотр с 1000
// считываем весь файл с темами в память
if ($_GET['event']=="addtopic") { $id=1000; $id="$fid$id";
$allid=null; $records=file("$datadir/topic$fid.dat"); $imax=count($records); $i=$imax;
if ($i > 0) { do {$i--; $rd=explode("|",$records[$i]); $allid[$i]=$rd[7]; } while($i>0);
//natcasesort($allid); // сортируем по возрастанию
do $id++; while(in_array($id,$allid) or is_file("$datadir/$id.dat"));
} else $id=$fid."1000";
$id=substr($id,3,4); // Нам нужен чистый ID из 4-х символов
} // if (event==addtopic)
// генерируем имя файлу с темой - СТАРЫЙ механизм
//if ($_GET['event']=="addtopic") { if ($fid<10) $add="0"; else $add="";
//do $id=mt_rand(1000,9999); while (file_exists("$datadir/$add$fid$id.dat"));
//$id="$add$fid$id"; }
if (strlen($id)>8) exit("$back. Номер темы должен быть числом. Критическая ошибка скрипта или попытка взлома");
if (strlen(ltrim($zag))<3) exit("$back ! Ошибка в вводе данных заголовка!");
$ip=$_SERVER['REMOTE_ADDR']; // определяем IP юзера
$text="$name|$who|$email|$zag|$msg|$date|$time|$fid$id||$tektime|$smname|$smzag|$fotodetali|$ip||||";
$text=replacer($text); $exd=explode("|",$text);
$name=$exd[0]; $zag=$exd[3]; $smname=$exd[10]; $smzag=$exd[11]; $smmsg=$exd[4];
if (!isset($name) || strlen($name) > $maxname || strlen($name) <1) exit("$back Ваше Имя пустое, или превышает $maxname символов!");
if (preg_match("/[^(\\w)|(\\x7F-\\xFF)|(\\-)]/",$name)) exit("$back Ваше имя содержит запрещённые символы. Разрешены русские и английские буквы, цифры, подчёркивание и тире.");
if (strlen(ltrim($zag))<3 || strlen($zag) > $maxzag) exit("$back Слишком короткое название темы или название превышает $maxzag символов!");
if (strlen(ltrim($msg))<2 || strlen($msg) > $maxmsg) exit("$back Ваше сообщение короткое или превышает $maxmsg символов.");
if (!preg_match('/^([0-9a-zA-Z]([-.w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-w]*[0-9a-zA-Z].)+[a-zA-Z]{2,9})$/si',$email) and strlen($email)>30 and $email!="") exit("$back и введите корректный E-mail адрес!");
// функция АНТИФЛУД здесь - повторное добавление сообщения/темы запрещено!
if (isset($tlines)) {
if ($tc<"-1") {$sdt[0]=null; $sdt[3]=null;} else {$last=$tlines[$tc+1]; $sdt=explode("|",$last);}
if ($_GET['event'] =="addtopic") { // ЕСЛИ добавление ТЕМЫ: имя = имя в файле, тема = последняя тема в файле
if ($name==$sdt[0] and $exd[3]==$sdt[3]) exit("$back. Такая тема уже создана. Спамить на форуме запрещено!");
} else { // ЕСЛИ добавление сообщения: имя = имя в файле, сообщение = последнему сообщению в файле
if (is_file("$datadir/$fid$id.dat")) {$linesn=file("$datadir/$fid$id.dat"); $in=count($linesn)-1;
if ($in > 0) { $dtf=explode("|",$linesn[$in]);
if ($name==$dtf[0] and $exd[4]==$dtf[4]) exit("$back. Такое сообщение уже размещено в данной теме. Спамить на форуме запрещено!");}
}
}} // if $event=="addtopic"
// ЕСЛИ введена команда АП, то меняем дату создания файла и тема самая первая будет
if ($_GET['event'] =="addanswer") { //при ОТВЕТе В ТЕМЕ
$pageadd=""; // расчитываем верную страницу и номер сообщения
if ($_GET['event']=="addanswer") {$in=$in+2; $page=ceil($in/$qq); if ($page!=1) $pageadd="&page=$page";}
// Проверяем, давно ли реактивировали тему
$timetek=time(); $timefile=filemtime("$datadir/$fid$id.dat");
$timer=$timetek-$timefile; // узнаем сколько прошло времени (в секундах)
// $timer<10 - 10 секунд защита от антифлуда
if ($smmsg=="ап!") {
if ($timer<10 and $timer>0) exit("$back тема была активна менее $timer секунд назад. Подождите чуть-чуть.");
touch("$datadir/$fid$id.dat");
print "
Спасибо, $name, тема реактивирована.
Через несколько секунд Вы будете автоматически перемещены в текущую тему $zag.
";
exit; }
if ($timer<10 and $timer>0) exit("$back тема была активна менее $timer секунд назад.");
}
$razdelname="";
if ($realbase==TRUE and $maxzd<1) { // Если подключена рабочая база, а не копия
$lines=file("$datadir/mainforum.dat"); $max=sizeof($lines)-1;
$dt=explode("|", $lines[$realfid]); $dt[5]++; $main_id="$fid$id";
if ($_GET['event']=="addtopic") $dt[4]++;
$txtdat="$dt[0]|$dt[1]|$dt[2]|$main_id|$dt[4]|$dt[5]|$smname|$date|$time|$tektime|$smzag|$dt[11]|$dt[12]||||";
$razdelname=$dt[1];
// запись данных на главную страницу
$fp=fopen("$datadir/mainforum.dat","a+");
flock ($fp,LOCK_EX);
ftruncate ($fp,0);//УДАЛЯЕМ СОДЕРЖИМОЕ ФАЙЛА
for ($i=0;$i<=$max;$i++) {if ($i==$realfid) fputs($fp,"$txtdat\r\n"); else fputs($fp,$lines[$i]);}
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
} // if ($realbase==TRUE)
if ($newmess==TRUE and $maxzd<1) { // запись в отдельный файл нового сообщения
if (is_file("$datadir/topic$fid.dat")) $nlines=count(file("$datadir/topic$fid.dat")); else $nlines=1;
if (is_file("$datadir/$fid$id.dat")) $nlines2=count(file("$datadir/$fid$id.dat"))+1; else $nlines2=1;
$newmessfile="$datadir/news.dat";
$newlines=file("$newmessfile"); $ni=count($newlines)-1; $i2=0; $newlineexit="";
$ntext="$fid|$main_id|$date|$time|$smname|$zag|$msg|$nlines|$nlines2|$razdelname|$who||||";
$ntext=str_replace("
", " ", $ntext);
// Блок проверяет, есть ли уже новое сообщение в этой теме. Если есть - отсеивает. На выходе - массив без этой строки.
for ($i=0;$i<=$ni;$i++) { $ndt=explode("|",$newlines[$i]);
if (isset($ndt[1])) {if ("$fid$id"!=$ndt[1]) $newlineexit.="$newlines[$i]"; $i2++; } }
// Записываем свежее сообщение в массив и далее сохраняем его в файл
if ($maxzd<1) { // Если тема доступна для всех - нет ограничений по звёздам
if ($i2>0) { // Если есть такая тема, то пишем весь массив, иначе тока строку
$newlineexit.=$ntext;
$fp=fopen("$newmessfile","w");
flock ($fp,LOCK_EX);
fputs($fp,"$newlineexit\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
} else {
$fp=fopen("$newmessfile","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$ntext\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);}
$file=file($newmessfile);$i=count($file);
if ($i>="15") {
$fp=fopen($newmessfile,"w");
flock ($fp,LOCK_EX);
unset($file[0]);
fputs($fp, implode("",$file));
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);}
}
}
} // if ($newmess==TRUE)
// БЛОК добавляет +1 к репе и +1 к сообщению или +1 к кол-ву тем, созданных юзером
if (isset($_COOKIE['wrfcookies']) and ($ok!=FALSE)) {
$ufile="$datadir/userstat.dat"; $ulines=file("$ufile"); $ui=count($ulines)-1; $ulinenew=""; $fileadd=0;
// Если юзер загружает файл - то ему ещё +5 в РЕПУ
if (isset($_FILES['file']['name']) and $repaaddfile!=FALSE) {if (strlen($_FILES['file']['name'])>1) $fileadd=$repaaddfile;}
// Ищем юзера по имени в файле userstat.dat
for ($i=0;$i<=$ui;$i++) {$udt=explode("|",$ulines[$i]);
if ($udt[0]==$wrfname) {
$udt[2]++; $udt[3]=$udt[3]+$fileadd;
if ($_GET['event']=="addtopic") {$udt[1]++; $udt[3]=$udt[3]+$repaaddtem;} else $udt[3]=$udt[3]+$repaaddmsg;
$ulines[$i]="$udt[0]|$udt[1]|$udt[2]|$udt[3]|$udt[4]|$udt[5]||||\r\n";}
$ulinenew.="$ulines[$i]";}
// Пишем данные в файл
$fp=fopen("$ufile","w");
flock ($fp,LOCK_EX);
fputs($fp,"$ulinenew");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp); }
if ($sendadmin==TRUE) { // отправляем информацию об ответе в теме АДМИНИСТРАТОРУ
$headers=""; // Настройки для отправки писем
$headers.="Content-Type: text/html; charset=windows-1251\r\n";
$headers.="From: Robot <".$adminemail.">\r\n";
$headers.="X-Mailer: WR-Forum PHP/".phpversion();
// оставляем только первые 200 символов сообщения
$msgmax=strlen($msg); if ($msgmax>200) $msgmax=200; $msg=substr($msg,0,$msgmax); $msg=replacer($msg);
// Собираем всю информацию в теле письма
$allmsg="
Это сообщение отправлено вам роботом форума $fname
Сообщение:
На форуме добавлено новое сообщение от $name.
Вот часть сообщения:
* Данное письмо сгенерировано и отправлено роботом, отвечать на него не нужно.
";
mail("$adminemail","=?windows-1251?B?".base64_encode("Извещение от форума $fname")."?=",$allmsg,$headers);
} // if $sendadmin==TRUE
if ($_GET['event'] =="addtopic") { // Добавление ТЕМЫ - запись данных
// Пишем В ТОПИК
$fp=fopen("$datadir/topic$fid.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$text\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
// Пишем В ТЕМУ
$fp=fopen("$datadir/$fid$id.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$text\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
print "
Спасибо, $name, за добавление темы!
Через несколько секунд Вы будете автоматически перемещены в созданную тему.