vave
Полезный
- Регистрация
- 22 Июн 2007
- Сообщения
- 467
- Реакции
- 16
- Автор темы
- #1
Очень прошу вас удалить всё лишнее из кода, оставив только превьюшки картинок с переходом на оригинальную картинку.
а вот код который нужно оставить,
когда я начинаю чистить, скрипт сразу выдаёт ошибки...
PHP:
<?
error_reporting (E_ALL); // ВРЕМЕННО - на время тестирования и отладки скрипта!
// error_reporting(0); // РАЗКОМЕНТИРУЙТЕ для постоянной работы!!!
@ini_set('register_globals','off');// Все скрипты написаны для этой настройки php
include "config.php";
$smwidth="180"; // Ширина миниизображения
$smheight="145"; // Высота миниизображения
// Определяем URL галереи
$host=$_SERVER["HTTP_HOST"]; $self=$_SERVER["PHP_SELF"]; $furl=str_replace('photos.php','',"http://$host$self");
$valid_types=array("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/",'<p>',$text);
$text=preg_replace("/\n/",'<br>',$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","<br> ",$text);
$text=str_replace("\n\n",'<p> ',$text);
$text=str_replace("\n",'<br> ',$text);
$text=str_replace("\t",'',$text);
$text=str_replace("\r",'',$text);
$text=str_replace(' ',' ',$text);
return $text; }
function prcmp ($a, $b) {if ($a==$b) return 0; if ($a<$b) return -1; return 1;} // Функция сортировки
// ДОБАВЛЕНИЕ ТЕМЫ или ОТВЕТА - ШАГ 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("<noindex><script language='Javascript'>function reload() {location = \"$furl\"}; setTimeout('reload()', 10000);</script><center><br><br><B>Админитратор заблокировал для Вашего IP: $ip<br> возможность добавлять что-либо по следующей причине:<br><br> <font color=red><B>$idt[1].</B></font><br><br>Вам разрешено просматривать сообщения,<br> а вот ДОБАВЛЯТЬ ТЕМЫ/СООБЩЕНИЯ категорически ЗАПРЕЩЕНО!</B></noindex>");
} 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("<B>$back. Попытка взлома по звёздам или ошибка в файле статистики</B>");
// защита по топику fid
if (!ctype_digit($fid) or strlen($fid)>3) exit("<B>$back. Попытка взлома через номер рубрики. Номер должен содержать только цифры и быть менее 4 символов</B>");
//--А-Н-Т-И-С-П-А-М--проверка кода--
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=null;
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. Превышено ограничение на кол-во допустимых тем в данной рубрике! Не более <B>$dt[11]</B> тем!");}
// проверка Логина/Пароля юзера. Может он хакер, тогда облом ему
// Этап 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("Ошибка при работе с КУКИ! <font color=red><B>Вы не сможете оставить сообщение, попробуйте подать его как гость.</B></font> Ваш логин и пароль не найдены в базе данных, попробуйте зайти на форум вновь. Если ошибка повторяется - обратитесь к администратору фотоальбома.");}
}}
print"<html><head><link rel='stylesheet' href='$fskin/style.css' type='text/css'></head><body>";
if ($_GET['event']=="addtopic" and $cangutema==FALSE and !isset($wrfname)) exit("<center>Администратор запретил гостям создавать темы!</center><BR><BR>");
if ($_GET['event']=="addanswer" and $cangumsg==FALSE and !isset($wrfname)) exit("<center>Администратор запретил гостям отвечать в темах!</center><BR><BR>");
// БЛОК ГЕНЕРИРУЕТ СЛЕДУЮЩИЙ ПО ПОРЯДКУ НОМЕР ТЕМЫ, начиная просмотр с 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"; } // 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 (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 "<B>ФАЙЛ НЕ загружен.</B> Возможные причины:<BR>
- разрешена загрузка только файлов с такими расширениями: <B>";
$patern=""; foreach($valid_types as $v) print"$v, ";
print"</B><BR>
- Вы пытаетесь загрузить файл с двойным расширением;<BR>
- неверно введён адрес или выбран испорченный файл;</B><BR>"; exit;}
// 2. считаем КОЛ-ВО ТОЧЕК в выражении - если большей одной - СВОБОДЕН!
$findtchka=substr_count($fotoname, "."); if ($findtchka>1) exit("ТОЧКА встречается в имени файла $findtchka раз(а). Это ЗАПРЕЩЕНО! <BR>\r\n");
// 2. если в имени есть .php, .html, .htm - свободен!
$bag="Извините, но в имени ФАйла <B>запрещено</B> использовать .php, .html, .htm";
if (preg_match("/\.php/i",$fotoname)) exit("Вхождение <B>.php</B> найдено. $bag");
if (preg_match("/\.html/i",$fotoname)) exit("Вхождение <B>.html</B> найдено. $bag");
if (preg_match("/\.htm/i",$fotoname)) exit("Вхождение <B>.htm</B> найдено. $bag");
// 3. защищаем от РУССКИХ букв в имени файла и проверка РАСШИРЕНИЯ файла
$patern=""; foreach($valid_types as $v) $patern.="$v|";
if (!preg_match("/^[a-z0-9\.\-_]+\.(".$patern.")+$/is",$fotoname)) exit("$fotoname - <br>Запрещено использовать РУССКИЕ буквы в имени файла, а также запрещено загружать файлы с расширением отличным от заданных!!");
// 4. Проверяем, может быть файл с таким именем уже есть на сервере
if (file_exists("$filedir/$fotoname")) exit("<br><br>$back. Файл с таким именем уже существует на сервере! Либо измените имя на другое, <br>либо обновите страницу - возможно Вы пытаетесь добавить сообщение и файл повторно!!");
// 5. Размер файла
$fotoksize=round($fotosize/10.24)/100; // размер ЗАГРУЖАЕМОГО файла в Кб.
$fotomax=round($max_upfile_size/10.24)/100; // максимальный размер файла в Кб.
if ($fotoksize>$fotomax) exit("Вы превысили допустимый размер файла! <BR><B>Максимально допустимый</B> размер: <B>$fotomax </B>Кб.<BR> <B>Вы пытаетесь</B> загрузить файл размером: <B>$fotoksize</B> Кб!");
// ЕСЛИ включен порядок присвоения файлу случайного имени при загрузке - генерируем случайное имя
if ($_GET['event']!="addtopic") $numb="$fid$id"; else $numb=$id;
if ($random_name==TRUE) {do $key=mt_rand(1000,9999); while (file_exists("$filedir/$numb$key.$ext")); $fotoname="$numb$key.$ext";}
if (copy($_FILES['file']['tmp_name'], $filedir."/".$fotoname)) {print "<br><br>Файл УСПЕШНО загружен: $fotoname (Размер: $fotosize байт)"; $fotodetali="1|$fotoname|$fotosize|";}
else echo "ОШИБКА загрузки файла - $fotoname...\n"; }}
// Проверяем размер фото. Если "габариты" меньше заданный в админке 150 х 120 - то ничего с ним не делаем
// блок делает мальное изображение исходной фотки - в качестве превьюшки
$size=getimagesize($_FILES['file']['tmp_name']);
if ($size[0]>$smwidth or $size[1]>$smheight) {
$smallfoto="sm-$fotoname";
require ('tumbmaker.php');
if (img_resize("$filedir/$fotoname", "$filedir/$smallfoto", $smwidth, $smheight)) echo 'Изображение масштабировано <B>успешно</B>.'; else echo '<font color=red><B>Ошибка МАСШАБИРОВАНИЯ фото! Поблемы с GD-библиотекой!</B></font> Обратитесь к Администратору';
} else $smallfoto="$fotoname";
$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.="..";}
if (strlen($id)>8) exit("<B>$back. Номер темы должен быть числом. Критическая ошибка скрипта или попытка взлома</B>");
if (strlen(ltrim($zag))<3) exit("$back ! Ошибка в вводе данных заголовка!");
$ip=$_SERVER['REMOTE_ADDR']; // определяем IP юзера
$text="$name|$who|$email|$zag|$msg|$date|$time|$id||$tektime|$smname|$smzag|$fotodetali|$ip|$smallfoto|$size[0]|$size[1]|$fotoksize|||||";
$text=replacer($text); $exd=explode("|",$text);
$name=$exd[0]; $zag=$exd[3]; $smname=$exd[10]; $smzag=$exd[11]; $smmsg=$exd[4];
$razdelname="";
if ($realbase==TRUE and $maxzd<1) { // Если подключена рабочая база, а не копия
$lines=file("$datadir/mainforum.dat"); $max=sizeof($lines)-1;
$dt=explode("|", $lines[$realfid]); $dt[5]++;
if ($_GET['event']=="addtopic") {$main_id="$id"; $dt[4]++;} else $main_id="$fid$id";
$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("
", "<br>", $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[3]=$udt[3]+$repaaddmsg+$fileadd;
$udt[2]=$udt[2]+$repaaddtem; if ($_GET['event']=="addtopic") $udt[1]++;
$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 ($_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/$id.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$text\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
print "<script language='Javascript'>function reload() {location = \"photos.php?id=$id\"}; setTimeout('reload()', 1500);</script>
<table width=100% height=80%><tr><td><table border=1 cellpadding=10 cellspacing=0 bordercolor=#224488 align=center valign=center width=60%><tr><td><center>
Спасибо, <B>$name</B>, за добавление темы!<BR><BR>Через несколько секунд Вы будете автоматически перемещены в созданную тему.<BR><BR>
<B><a href='photos.php?id=$id'>ДАЛЬШЕ >>></a></B></td></tr></table></td></tr></table></center></body></html>";
exit; }
if ($_GET['event'] =="addanswer") { //ОТВЕТ В ТЕМЕ - запись данных
$timetek=time(); $timefile=filemtime("$datadir/$fid$id.dat");
$timer=$timetek-$timefile; // узнаем сколько прошло времени (в секундах)
$fp=fopen("$datadir/$fid$id.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$text\r\n");
fflush ($fp);
flock ($fp,LOCK_UN);
fclose($fp);
if ($timer<0) {$viptime=strtotime("+2 year"); touch("$datadir/$fid$id.dat",$viptime);}
print "<script language='Javascript'>function reload() {location = \"photos.php?id=$fid$id$pageadd#m$in\"}; setTimeout('reload()', 1500);</script>
<table width=100% height=80%><tr><td><table border=1 cellpadding=10 cellspacing=0 bordercolor=#224488 align=center valign=center width=60%><tr><td><center>
Спасибо, <B>$name</B>, Ваш ответ успешно добавлен.<BR><BR>Через несколько секунд Вы будете автоматически перемещены в текущую тему <BR><B>$zag</B>.<BR><BR>
<B><a href='photos.php?id=$fid$id$pageadd#m$in'>ДАЛЬШЕ >>></a></B></td></tr></table></td></tr></table></center></body></html>";
exit;
}
}
// БЛОК подключает копию главного файла при повреждении
if (is_file("$datadir/mainforum.dat")) $mainlines=file("$datadir/mainforum.dat"); $imax=count($mainlines); $i=$imax;
if (!isset($mainlines)) $datasize=0; else $datasize=sizeof($mainlines);
if ($datasize<=0) {if (is_file("$datadir/copy.dat")) {$mainlines=file("$datadir/copy.dat"); $datasize=sizeof($mainlines);}}
if ($datasize<=0) exit("<center><b>Файл РУБРИК несуществует! Зайдите в <a href='admin.php'>админку</a> и создайте рубрики!</b>");
$error=FALSE; $raz=""; $frname=null; $frtname=""; $rfid="";
// ДЛЯ ссылки типа razdel=
if (isset($_GET['razdel'])) {
do {$i--; $dt=explode("|", $mainlines[$i]);
if ($dt[0]==$_GET['razdel']) {$rfid=$i; $frname="$dt[2] ->";}
} while($i >0);
$i=$imax;}
if (isset($_GET['id'])) { // Блок выводит в статусной строке: ТЕМА -> РАЗДЕЛ -> ФОРУМ
$id=$_GET['id'];
if (strlen($id)<=3 and !is_file("$datadir/topic$id.dat")) $error="ый Вами раздел";
if (strlen($id)> 3 and !is_file("$datadir/$id.dat")) $error="ая Вами тема";
if (!ctype_digit($id)) $error="ая Вами тема или раздел";
if (isset($_GET['quotemsg'])) $error=TRUE;
if(strlen($id)>3) {$fid=substr($id,0,3); $id=substr($id,3,4);} else $fid=$id;
$imax=count($mainlines); $i=$imax;
// проходим по всем разделам и топикам - ищем запрашиваемый
do {$i--; $dt=explode("|", $mainlines[$i]);
if ($dt[0]==$fid) { $frname="$dt[1] ->";
if (isset($dt[11])) { if($dt[11]>0) $maxtem=$dt[11]; else $maxtem="999";}}
} while($i >0);
//$frtname="1"; $frname="2"; $fname="3";
// Блок считывает название темы для отображения в шапке форума
if (strlen($id)>3 and is_file("$datadir/topic$fid.dat")) {
$lines=file("$datadir/topic$fid.dat"); $imax=count($lines); $i=$imax;
do {$i--; $dt=explode("|",$lines[$i]);
if($dt[7]=="$fid$id") $frtname="$dt[3] ->";
} while ($i>0); }
if ($error==TRUE) { // ЗАПРЕЩАЕМ ИНДЕКСАЦИЮ страниц с цитированием / УДАЛЁННЫЕ РАЗДЕЛЫ / ТЕМЫ!
$topurl="$fskin/top.html";
ob_start(); include $topurl; $topurl=ob_get_contents(); ob_end_clean();
$topurl=str_replace("<meta name=\"Robots\" content=\"photos,follow\">",'<meta name="Robots" content="noindex,follow">',$topurl);
print"$topurl";
if (strlen($error)>1) exit("</td></tr></table><div align=center><br>Извините, но запрашиваем$error отсутствует.<br>
Рекомендую перейти на главную страницу фотоальбома по <a href='$furl'>этой ссылке</a>,<br>
и найти интересующую Вас тему.<br></div>
</td></tr></table></td></tr></table></td></tr></table>"); }
} // if (isset($_GET['id']))
if (isset($_GET['id'])) { $id=$_GET['id'];
// страница С ТЕМАМИ выбранной РУБРИКИ
if (strlen($id)==3) { $fid=$id;
// Защиты
if (!ctype_digit($fid) or strlen($fid)>3) exit("<B>$back. Номер рубрики должен быть цифровым и содержать менее 4 символов</B>");
$imax=count($mainlines); if (($fid>999) or (strlen($fid)==0)) exit("<b>Данный раздел удалён или не существует.</b>");
if ($raz!="razdel") {
// определяем есть ли информация в файле с данными
if (is_file("$datadir/topic$fid.dat")) {
$msglines=file("$datadir/topic$fid.dat"); $maxi=count($msglines); $i=$maxi;
if ($maxi>0) {
if ($maxi>$maxtem-1) $addbutton="<table width=100%><TR><TD>Количество допустимых тем в рубрике исчерпано.";
// БЛОК СОРТИРОВКИ: последние ответы ВВЕРХУ (по времени создания файла с темой)!
do {$i--; $dt=explode("|", $msglines[$i]);
$filename="$dt[7].dat"; if (is_file("$datadir/$filename")) $ftime=filemtime("$datadir/$filename"); else $ftime="";
$newlines[$i]="$ftime|$dt[7]|$i|";
} while($i > 0);
usort($newlines,"prcmp");
// $newlines - массив с данными: ДАТА | ИМЯ_ФАЙЛА_С_ТЕМОЙ | № п/п |
// $msglines - массив со всеми темами выбранной рубрики
$i=$maxi;
do {$i--; $dtn=explode("|", $newlines[$i]);
$numtp="$dtn[2]"; $lines[$i]="$msglines[$numtp]";
} while($i > 0);
// КОНЕЦ блока сортировки
// Показываем QQ ТЕМ
$fm=$maxi-$qq*($page-1);
if ($fm<"0") $fm=$qq; $lm=$fm-$qq; if ($lm<"0") $lm="0";
do {$fm--; $num=$fm+2;
$dt=explode("|", $lines[$fm]);
if (is_file("$datadir/$filename.dat")) { // если файл с темой существует - то показать тему в списке!
$msgsize=sizeof(file("$datadir/$filename.dat"));
if ($temp>0) print"</TD><TD>"; if ($temp==0) print"<TR><TD>"; // открываем главную по отношению к 2-м по 400 таблицу
print"</b></span>";
print"<br>$dt[4]<br><br><span class=gensmall>Добавил ";
$codename=urlencode($dt[0]);
if ($dt[1]=="да") {
if (!isset($wrfname)) print "$dt[0]"; else print "<small>($users)</small> ";} else print"<small>гость</small> $dt[0]";
$temp++; if ($temp==2) {$temp=0; print"</td></tr>";} // Нужно чтобы делить на два столбика
// защита if (strlen...) только если файл есть и имеет верный формат - выводим
if ($msgsize>=2) {$linesdat=file("$datadir/$filename.dat"); $dtdat=explode("|", $linesdat[$msgsize-1]);
if (strlen($linesdat[$msgsize-1])>10) {$dt[0]=$dtdat[0]; $dt[1]=$dtdat[1]; $dt[2]=$dtdat[2]; $dt[5]=$dtdat[5]; $dt[6]=$dtdat[6];}}
} //if is_file
} while($lm < $fm);
if ($stop!=TRUE) $addbutton.="<br><span class=nav><a name='add' href=\"photos.php?add=razdel&id=$fid\"><img src='$fskin/add_razdel.gif' border=0></a> ";
else $addbutton.="Извините за неудобство, но администратор временно приостановил добавление тем и сообщений!";
// формируем переменную $pageinfo - со СПИСКОМ СТРАНИЦ
if (strlen($findme)>1) $findadd="&findme=$findme"; else $findadd="";
$f1=$page+2; $f2=abs($page-2); if ($f2=="0") $f2=1; if ($page>=$maxpage-1) $f1=$maxpage;
if ($maxpage<=5) {$f1=$maxpage; $f2=1;}
for($i=$f2; $i<=$f1; $i++) { if ($page==$i) $pageinfo.="<B>$i</B> ";
else {if ($i!=1) $addpage="&page=$i"; $pageinfo.="<a href=photos.php?id=$fid$addpage$findadd>$i</a> ";} }
if ($page<=$maxpage-3 and $maxpage>5) $pageinfo.="... <a href=photos.php?id=$fid&page=$maxpage$findadd>$maxpage</a>";
$pageinfo.='</div>';
print"</td></tr></table>
$addbutton<TD><table width=100%><tr><td align=right colspan=3>
$pageinfo</b></span></td></tr></table>";
} else print"$addbutton<br><span class=nav><a name='add' href=\"photos.php?add=razdel&id=$fid\"><img src='$fskin/add_razdel.gif' border=0></a> ";
} else print"$addbutton";
echo'</tr></table><BR>';
if (isset($_GET['add'])) { if ($cangutema=="0" and !isset($wrfname)) print"<center><h5>Администратор запретил создавать гостям темы! Для регистрации пройдите по ссылке: <B>зарегистрируйтесь</B></h5></center><BR><BR>"; else {
$maxzag=$maxzag-10; // так нужно!!!
print"<form action=\"photos.php?event=addtopic&id=$fid\" method=post enctype=\"multipart/form-data\" name=REPLIER>
<table border=0>
<tr><td class=catHead colspan=2 height=28><span class=cattitle>Добавление раздела</span></td></tr>
<tr><td class=row1 valign=top><span class=genmed><B>Заголовок раздела</B></span></TD><TD class=row2>
<input type=hidden name=maxzd value='$maxzd'><input type=text class=post name=zag maxlength=$maxzag size=70>
</TD></TR>";
addmsg("");
} }
}
} //if ($raz!="razdel")
// показываем СООБЩЕНИЯ выбранной темы
if (strlen($id)>6) { $fid=substr($id,0,3);
// определяем есть ли информация в файле с данными
if (!is_file("$datadir/$id.dat")) exit("<BR>$back. Извините, но такой темы на форуме не существует.<BR> Скорее всего её удалил администратор.");
$lines=file("$datadir/$id.dat"); $mitogo=count($lines); $i=$mitogo; $maxi=$i-1;
if ($mitogo>0) { $tblstyle="row1"; $printvote=null;
// Считываем СТАТИСТИКУ ВСЕХ УЧАСТНИКОВ
if (is_file("$datadir/userstat.dat")) {$ufile="$datadir/userstat.dat"; $ulines=file("$ufile"); $ui=count($ulines)-1;}
// Ищем тему в topicХХ.dat - проверяем не закрыта ли тема? и сразу же ищем есть ли в топике
$ok=FALSE; $closed=FALSE; if (is_file("$datadir/topic$fid.dat")) {
$msglines=file("$datadir/topic$fid.dat"); $mg=count($msglines);
do {$mg--; $mt=explode("|",$msglines[$mg]);
if ($mt[7]==$id and $mt[8]=="closed") $closed=TRUE;
if ($mt[7]==$id) $ok=1; // тема есть в указанном разделе?
} while($mg > "0");}
$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);
// Уточняем статус по кол-ву ЗВЁЗД юзера. Если меньше допустимых N в этой рубрике - то досвиданья!
$maxzd=null;
do {$imax--; $ddt=explode("|",$mainlines[$imax]); if ($ddt[0]==$fid) $maxzd=$ddt[12]; } while($imax>"0");
if ($maxzd>=1) {
if (!ctype_digit($maxzd)) exit("$back звёзды исчисляются в цифрах. а в файле данных - ерунда!");
$noacsess="<br><br><br><br><table align=center width=700><tr><th class=thHead colspan=4 height=25>Доступ в раздел ограничен</th></tr>
<tr class=row2><td class=row1><center><BR><BR><B><span style='FONT-SIZE: 14px'>Для просмотра данного раздела необходимо быть зарегитстрированным и иметь рейтинг не менее $maxzd звёзд.";
if ($ok==FALSE) exit("<br><br>$back. Номер раздела указан ошибочно!<br> В указаном разделе нет такой темы!");
// БЛОК проверяет логин и пароль юзера, считывает кол-во его звёзд и сравнивает с заданным в рубрике
if (isset($_COOKIE['wrfcookies'])) { // весь блок работает при наличии КУКИ
$text=$_COOKIE['wrfcookies'];
$text=replacer($text);
$wrfc=explode("|",$text); $wrfname=$wrfc[0]; if (isset($wrfc[1])) $wrfpass=$wrfc[1]; else exit("$back попытка взлома - в куки нет пароля. Куда он делся ;-) ?");
// пробегаем файл с юзерами и считываем его в память
$iu=$usercount; $ok=FALSE;
do {$iu--; $du=explode("|",$userlines[$iu]);
if (isset($du[1])) { $realname=strtolower($du[0]);
if (strtolower($wrfname)===$realname & $wrfpass===$du[1]) {$ok="$i"; if ($du[2]<$maxzd) exit("$noacsess У Вас всего $du[2] звёзд.</B></center><BR><BR>$back<BR><BR></td></table><br>"); }}
} while($iu > "0");
} else exit("$noacsess</B></center><BR><BR>$back<BR><BR></td></table><br>"); // если юзер тот, за кого себя выдаёт то его пускаем, иначе - обломаем
if ($ok!=FALSE) exit("$noacsess</B></center><BR><BR>$back<BR><BR></td></table><br>");
}
// Исключаем ошибку вызова несуществующей страницы
if (!isset($_GET['page'])) $page=1; else {$page=$_GET['page']; if (!ctype_digit($page)) $page=1; if ($page<1) $page=1;}
$fm=$qq*($page-1); if ($fm>$maxi) $fm=$maxi-$qq;
$lm=$fm+$qq; if ($lm>$maxi) $lm=$maxi+1;
// формируем переменную $pageinfo - со СПИСКОМ СТРАНИЦ
$pageinfo=""; $addpage=""; $maxpage=ceil(($maxi+1)/$qq); if ($page>$maxpage) $page=$maxpage;
$qm=null; $flag=0;
do {$dt=explode("|", replacer($lines[$fm]));
$youwr=null; $fm++; $num=$maxi-$fm+2; $status="";
if (strlen($lines[$fm-1])>5) { // Если строчка потерялась в скрипте (пустая строка) - то просто её НЕ выводим
if (isset($_GET['quotemsg'])) {$quotemsg=replacer($_GET['quotemsg']); if(ctype_digit($quotemsg) and $quotemsg==$fm) $qm="[Quote][b]$dt[0] пишет:[/b]\r\n".$dt[4]."[/Quote]";}
$msg=str_replace("[b]","<b>",$dt[4]);
$msg=str_replace("[/b]","</b>", $msg);
$msg=str_replace("[RB]","<font color=red><B>", $msg);
$msg=str_replace("[/RB]","</B></font>", $msg);
$msg=str_replace("<br>","<br>",$msg);
// Если разрешена публикация УРЛов
if ($liteurl==TRUE) $msg=preg_replace ("#([^\[img\]])(http|https|ftp|goper):\/\/([a-zA-Z0-9\.\?&=\;\-\/_]+)([\W\s<\[]+)#i", "\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>\\4", $msg);
// запускать ТОЛЬКО после замены АДРЕСА URL!!!
$msg=preg_replace('#\[img\](.+?)\[/img\]#','<img src="$1" border="0">',$msg);
// считываем в память данные по пользователю
if ($dt[1]=="да") { $iu=$usercount; $predup="0";
do {$iu--; $du=explode("|", $userlines[$iu]); if ($du[0]==$dt[0])
{ if (isset($du[12])) {$status=$du[13]; $reiting=$du[2]; $youavatar=$du[12]; $email=$du[3]; $icq=$du[7]; $site=$du[8]; $userpn=$iu;}
if (isset($_COOKIE['wrfcookies'])) $youwr=preg_replace("#(\[url=([^\]]+)\](.*?)\[/url\])|(http://(www.)?[0-9a-z\.-]+\.[a-z]{2,6}[0-9a-z/\?=&\._-]*)#","<a href=\"$4\" target='_blank'>$4</a> ",$du[11]); else $youwr=$du[11];}
} while($iu > "0");
}
if ($tblstyle=="row1") $tblstyle="row2"; else $tblstyle="row1";
if ($flag==FALSE) { // БЛОК ПЕЧАТАЕМ ОДИН РАЗ
$frname=str_replace(' ->','',$frname); $frtname=str_replace(' ->','',$frtname); //вырезаем лишние символы
$flag=TRUE;
print "
<table border=0 width=126 cellspacing=0 cellpadding=0><tr>";}
print"<td valign=top>
<table>
<tr><td valign=top align=center class=row1>
<table width=1 height=1 cellpadding=0 cellspacing=0 style='margin:10px;'><tr>
<td align=center>";
// Если ПРИКРЕПЛЁН ФАЙЛ к сообщению - то показываем значёк и ссылку на него или картинку
if (isset($dt[12])) { if ($dt[12]!="" and is_file("$filedir/$dt[13]")) {
$fsize=round($dt[14]/10.24)/100;
if (preg_match("/.(jpg|jpeg|bmp|gif|png)+$/is",$dt[13]))
print"<a href='$filedir/$dt[13]'><img border=0 src='$filedir/$dt[17]'></a>";}}
$addpage=""; if ($page>1) $addpage="&page=$page"; // нужно для цитирования
print"<img src=\"$fskin/spacer.gif\" width=1 height=1>";
if ($dt[2]!="") $dt[2]="<a href='mailto:$dt[2]' class=gallery>$dt[1]</a>"; else $dt[2]="$dt[0]";
print"</table>
</td></tr></table>
</td>";
$colrubperpage=3;
$cm=1; // ДЕЛИМ ВСЕ РУБРИКИ на столбцы
if ((round($fm/$colrubperpage))==($fm/$colrubperpage)) {$cm++; print "</TR><TR>";}
}
// если строчка потерялась
} while($fm < $lm);
print" </tr></table> $pageinfo";
{
if ($closed==FALSE) {
if (isset($_COOKIE['wrfcookies'])) {$wrfc=$_COOKIE['wrfcookies']; $wrfc=htmlspecialchars($wrfc); $wrfc=stripslashes($wrfc); $wrfc=explode("|", $wrfc); $wrfpass=replacer($wrfc[1]);} else {unset($wrfpass); $wrfpass="";}
if ($stop==FALSE) {
} else echo'<center>Извините за неудобство, но администратор временно приостановил добавление тем и сообщений!';
} else echo'<center><font style="font-size: 16px;font-weight:bold;"><BR>Тема закрыта для обсуждения!<BR><BR>';
}}
}
}
?>
</td></tr></table>
</body>
</html>
а вот код который нужно оставить,
PHP:
if (isset($dt[12])) { if ($dt[12]!="" and is_file("$filedir/$dt[13]")) {
$fsize=round($dt[14]/10.24)/100;
if (preg_match("/.(jpg|jpeg|bmp|gif|png)+$/is",$dt[13]))
print"<a href='$filedir/$dt[13]'><img border=0 src='$filedir/$dt[17]'></a>111";}}
$addpage=""; if ($page>1) $addpage="&page=$page"; // нужно для цитирования
print"<img src=\"$fskin/spacer.gif\" width=1 height=1>";
когда я начинаю чистить, скрипт сразу выдаёт ошибки...