// WR-Gallery v 1.5 // 14.06.10 г. // Miha-ingener@yandex.ru
error_reporting (E_ALL);
include "config.php";
$valid_types=array("gif","jpg","png","jpeg"); // допустимые расширения
$shapka="
";
$back="
Вернитесь назад"; // Удобная строка
// Функция сортировки
function prcmp ($a, $b) {if ($a==$b) return 0; if ($a<$b) return -1; return 1;}
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; }
function nospam() { global $max_key,$rand_key; // Функция АНТИСПАМ
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'
Защитный код:
';
for ($i=0; $i<$max_key; $i++) {
$snum[$i]=mt_rand(0,9); $psnum=md5($snum[$i]+$rand_key+$dopkod);
echo "\n";
$xkey=$xkey.$snum[$i];}
$xkey=md5("$xkey+$rand_key+$dopkod"); //число + ключ из config.php + код меняющийся кажые 24 часа
print" (введите число, указанное на картинке)
";
return; }
if (isset($_GET['event'])) {
if ($_GET['event']=="formacoment") { // Добавление комментария к ФОТО - форма
$rubrika="Добавление комментария к фото";
if (isset($_GET['msnum'])) $msnum=replacer($_GET['msnum']); else $msnum="";
if (strlen($msnum)>10) exit("Ошибка - отсутствует UID-фото. Вы или хакер или ошибка скрипта!");
if (is_file("$datadir/$msnum.dat")) { $linesn = file("$datadir/$msnum.dat"); $in=count($linesn); if ($in > 15) {print "$back более 15 комментариев к объявления добавлять запещено."; exit;}}
if (is_file("$gal_skin/top.html")) include "$gal_skin/top.html";
print"
";
}
if ($_GET['event']=="addcoment") { // ДОБАВЛЕНИЕ КОММЕНТАРИЯ К ФОТО - сохранение
if (isset($_GET['msnum'])) $msnum=replacer($_GET['msnum']); else $msnum="";
if (strlen($msnum)>10) exit("Ошибка - отсутствует UID-фото. Вы или хакер или ошибка скрипта!");
if (is_file("$datadir/$msnum.dat")) { $linesn = file("$datadir/$msnum.dat"); $in=count($linesn); if ($in > 15) {print "$back более 15 комментариев к объявления добавлять запещено.
"; exit;}}
if (!ctype_digit($msnum) or strlen($msnum)<4) {exit("
$back. Попытка взлома. Хакерам здесь не место.
");}
if(isset($_GET['event'])) { // Добавление комментария - ШАГ 2 ЗАПИСЬ данных
//--А-Н-Т-И-С-П-А-М--проверка кода--
if (isset($_POST['name'])) {$name=$_POST['name'];} else {$name="";}
if ($name==="" || strlen($name)>$maxname) {print "$back Ваше имя пустое, или превышает $maxname символов!"; exit;} $name=str_replace("|","I",$name);
if (isset($_POST['type'])) {$type=$_POST['type'];} else {$type="0";} $type=str_replace("|","I",$type); if (strlen($type)> 2) {print" Ошибка скрипта - \$ type=$type."; exit;}
$msg=$_POST['msg']; if ($msg == "" || strlen($msg) > $maxmsg) {print "$back Ваш комментарий пуст или превышает $maxmsg символов."; exit;} $msg=str_replace("|","I",$msg);
if (isset($_POST['email'])) {$email=$_POST['email'];} else {$email="";} $email=str_replace("|","I",$email);
$day=mktime(); $text="$name|$email|$msg|$day|$type|";
$text=str_replace( " " ,' ' ,$text);
$text=str_replace( "&" ,'&' ,$text);
$text=str_replace( "" ,'-->' ,$text);
$text=preg_replace( "/"; exit;
}
} // if ($_GET['event']=="addcoment") { // ДОБАВЛЕНИЕ КОММЕНТАРИЯ К ФОТО - сохранение
if ($_GET['event']=="add") { // Добавление ФОТО
if (isset ($_POST['name']) & isset ($_POST['msg']) & isset ($_POST['email'])) {$name=$_POST['name']; $msg=$_POST['msg']; $email=$_POST['email'];} else {exit;}
$name=trim($name); $msg=trim($msg); $email=trim($email); // Вырезаем ПРОБЕЛьные символы
$name=str_replace("|","I",$name); $email=str_replace("|","I",$email); $msg=str_replace("|","I",$msg); // чтоб БД не "уронили"!
if ($name==="" || strlen($name)>$maxname) {print "$shapka $back ваше имя или пустое, или превышает $maxname символов!"; exit;}
if ($msg==="" || strlen($msg)>$maxmsg) {print "$shapka $back ваше сообщение или пустое или превышает $maxmsg символов."; exit;}
if (!eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$", $email) and strlen($email)>30 and $email!=="") {print "$shapka $back и введите корректный E-mail адрес!"; exit;}
$fotoname = $_FILES['file']['name']; // определяем имя файла
$fotosize=$_FILES['file']['size']; // Запоминаем размер файла
// проверяем расширение файла
$ext = strtolower(substr($fotoname, 1 + strrpos($fotoname, ".")));
if (!in_array($ext, $valid_types)) {echo 'ФАЙЛ НЕ загружен. Возможные причины:
- разрешена загрузка только файлов с такими расширениями: gif, jpg, jpeg, png
- Вы пытаетесь загрузить не графический файл;
- неверно введён адрес или выбран файл; '; exit;}
// ЗАЩИТЫ от ВЗЛОМА
// 1. считаем кол-во точек в выражении - если большей одной - СВОБОДЕН!
$findtchka=substr_count($fotoname, "."); if ($findtchka>1) {echo "ТОЧКА встречается в имени файла $findtchka раз(а). Это ЗАПРЕЩЕНО! \r\n";}
// 2. если в имени есть .php, .html, .htm - свободен!
$bago="Извините. В имени ФАйла запрещено использовать .php, .html, .htm";
if (preg_match("/\.php/i",$fotoname)) {echo "Вхождение \".php\" найдено. $bago"; exit;}
if (preg_match("/\.html/i",$fotoname)) {echo "Вхождение \".html\" найдено. $bago"; exit;}
if (preg_match("/\.htm/i",$fotoname)) {echo "Вхождение \".htm\" найдено. $bago"; exit;}
// 3. защищаем от РУССКИХ букв в имени файла и проверяем расширение файла
if (!preg_match("/^[a-z0-9\.\-_]+\.(jpg|gif|png|)+$/is",$fotoname)) {print "Запрещено использовать РУССКИЕ буквы в имени файла!"; exit;}
// 4. Проверяем, может быть файл с таким именем уже есть на сервере
if (file_exists("$datadir/$fotoname")) {print "Файл с таким именем уже существует на сервере! Измените имя на другое!"; exit;}
// Конец защит по имени файла
// 5. Размер фото
$fotoksize=round($fotosize/10.24)/100; // размер ЗАГРУЖАЕМОГО ФОТО в Кб.
$fotomax=round($max_file_size/10.24)/100; // максимальный размер фото в Кб.
if ($fotoksize>$fotomax) {print"Вы превысили допустимый размер фото! Максимально допустимый размер фото: $fotomax Кб. Вы пытаетесь загрузить изображение: $fotoksize Кб!"; exit;}
// 6. "Габариты" фото > $maxwidth х $maxheight - ДО свиданья! :-)
$size=getimagesize($_FILES['file']['tmp_name']);
if ($size[0]>$maxwidth or $size[1]>$maxheight) {print "$size[0] x $size[1] - не допустимые габариты фото. Допустимо лишь $maxwidth х $maxheight px!"; exit;}
if ($fotosize>"0" and $fotosize<$max_file_size) {
copy($_FILES['file']['tmp_name'], $datadir."/".$fotoname);
print "
Фото УСПЕШНО загружено: $fotoname (Размер: $fotosize байт)";}
else { print "Файл НЕ ЗАГРУЖЕН - ошибка СЕРВЕРА! Обратитесь к администратору!"; exit;}
$size=getimagesize("$datadir/$fotoname");
// Проверяем размер фото. Если "габариты" меньше заданный в админке 150 х 120 - то ничего с ним не делаем
// блок делает мальное изображение исходной фотки - в качестве превьюшки
if ($size[0]>$smwidth or $size[1]>$smheight) {
$smallfoto="sm-$fotoname";
require ('tumbmaker.php');
if (img_resize("$datadir/$fotoname", "$datadir/$smallfoto", $smwidth, $smheight)) echo 'Изображение масштабировано успешно.'; else echo 'Ошибка МАСШАБИРОВАНИЯ фото! Поблемы с GD-библиотекой! Обратитесь к Администратору';
} else {$smallfoto="$fotoname";}
// Генерируем рандомный КЛЮЧ - msnum-фото
do $key=mt_rand(10000,99999); while (file_exists("data/$key.txt"));
// Запись данных: собщение|имя|емайл|дата|время|фото_малое|фото_большое|размер_Кб|ширина|высота|UID|Рейтинг|Проголосовало|
$text="$msg|$name|$email|$date|$time|$smallfoto|$fotoname|$fotoksize|$size[0]|$size[1]|$key|-1|0|";
$text=replacer($text);
$fp=fopen("$datadir/fotobase.dat","a+");
flock ($fp,LOCK_EX);
fputs($fp,"$text\r\n");
flock ($fp,LOCK_UN);
fclose($fp);
@chmod("$datadir/fotobase.dat", 0644);
if ($sendmail =="1") { // отправка СООБЩЕНИЯ админу и на мыло
$headers=null;
$headers.="Content-Type: text/plain; charset=windows-1251\r\n";
$headers.="From: ".$name." <".$email.">\r\n";
$headers.="X-Mailer: PHP/".phpversion()."\r\n";
$host=$_SERVER["HTTP_HOST"]; $self=$_SERVER["PHP_SELF"]; $glurl="http://$host$self";
$allmsg = $glname.chr(13).chr(10).'Загружено новое изображение: '.$glurl.chr(13).chr(10).'Имя: '.$name.chr(13).chr(10).'E-mail: '.$email.chr(13).chr(10).'Сообщение: '.$msg.chr(13).chr(10);
mail("$adminemail", "$glname (сообщение)", $allmsg, $headers); }
// закачиваем прикреплённый файл на сервер
if (isset($_POST['file'])) {
if (!copy($file, $file.'.bak')) {print ("при копировании файла $file произошла ошибка... \n");}}
print "$shapka
Спасибо $name, Ваше фото успешно добавлено. Через несколько секунд Вы будете перемещены на главную страницу фотогалереи.
Если этого не происходит, то для возврата нажмите здесь
";
exit; }
if ($_GET['event']=="showimg") { // показываем КРУПНОЕ ИЗОБРАЖЕНИЕ
if (!isset($_GET['msnum'])) {exit("$back. Попытка взлома. Хакерам здесь не место.");}
$msnum=$_GET['msnum']; $msnum=trim($msnum);
if (!ctype_digit($msnum) or strlen($msnum)!=5) {exit("$back. Попытка взлома. Хакерам здесь не место.");}
$lines=file("$datadir/fotobase.dat"); $maxi=count($lines); $i="0";
do {$dt=explode("|", $lines[$i]); $i++; $number=$i;
if ($dt[10]===$msnum) { print "$shapka
"; $ok="1";
print"
";
if ($number<$maxi) {$next=$number; $dtlast=explode("|",$lines[$next]); print "";}
print "
";
if ($number>1) {$last=$number-2; $dtnext=explode("|",$lines[$last]); print "";}
print "
";
}
} while($i < $maxi);
if (!isset($ok)) {exit("$back. Данное изображение отсутствует в фотогалерее. Возможно, его удалил админ!");}
exit;}
if ($_GET['event']=="addform" and $whofotoadd==TRUE) { // Выводим ФОРМУ ДЛЯ ЗАГРУЗКИ ФОТКИ
$fotomax=round($max_file_size/10.24)/100; // максимальный размер фото в Кб.
if (is_file("$gal_skin/top.html")) include "$gal_skin/top.html";
print "$shapka