Advertisement
Gregh

Mudrodum

May 26th, 2014
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.16 KB | None | 0 0
  1. <?php
  2. /***********************************************************
  3.  *   Форматтер цитат для проекта "Мудродум"
  4.  *   @author: Amarant
  5.  **********************************************************/
  6. error_reporting(E_ALL);
  7. ini_set('display_errors', 1); // уровень ошибок
  8.  
  9. // Включение сжатия HTML кода, если доступно.
  10. if (extension_loaded('gzip')) {
  11.     ob_start('ob_gzhandler');
  12. }
  13.  
  14. date_default_timezone_set(getParam('TIMEZONE')); // Настройки часового пояса
  15.  
  16. $sitename        = getParam('NAME');
  17. $siteversion     = getParam('VERSION');
  18. $metakeywords    = getParam('KEYWORDS');
  19. $metadescription = getParam('DESCRIPTION');
  20. $socdescription  = getParam('SOCDESCRIPTION');
  21. $base            = getParam('BASEDIR');
  22. $pp              = getParam('NUMPP');
  23. $copydate        = getParam('COPYDATE');
  24. /************************************************************/
  25. ob_start(); // Стартуем хедеры в буфер
  26. session_start(); // Стартуем сессию
  27.  
  28. if ($siteversion == '') {
  29.     $siteversion = '1';
  30. }
  31. if ($copydate != date('Y')) {
  32.     $copydate = $copydate . '-' . date('Y');
  33. }
  34. // ФУНКЦИИ ТРЕТЬЕГО УРОВНЯ
  35. // Получение параметров сайта
  36. function getParam($param)
  37. {
  38.     $settings = 'settings.ini';
  39.     if (file_exists($settings))
  40.     {
  41.     $settings = parse_ini_file('settings.ini');
  42.         if($settings[$param] != '')
  43.         {
  44.             return sanitize($settings[$param]);
  45.         }
  46.     }
  47.     else
  48.     {
  49.     return 'The file '.$settings.' does not exist';
  50.     }
  51.  
  52. }
  53.  
  54. // Обработка текста от вредных элементов (ВЫЗОВ ИЗ sanitize()! )
  55. function cleanInput($input)
  56. {
  57.    
  58.     $search = array(
  59.         '@<script[^>]*?>.*?</script>@si', // javascript
  60.         '@<[\/\!]*?[^<>]*?>@si', // HTML теги
  61.         '@<style[^>]*?>.*?</style>@siU', // теги style
  62.         '@<![\s\S]*?--[ \t\n\r]*>@' // многоуровневые комментарии
  63.     );
  64.    
  65.     $output = preg_replace($search, '', $input);
  66.     $output = preg_replace("~\s{2,}~", " ", trim($output));
  67.     return $output;
  68. }
  69.  
  70. // Убираем магические кавычки и проч.
  71. function sanitize($input)
  72. {
  73.     if (is_array($input)) {
  74.         foreach ($input as $var => $val) {
  75.             $output[$var] = sanitize($val);
  76.         }
  77.     } else {
  78.         if (get_magic_quotes_gpc()) {
  79.             $input = stripslashes($input);
  80.         }
  81.         $output  = cleanInput($input);
  82.     }
  83.     return $output;
  84. }
  85.  
  86. // Проверка на длину строки
  87. function stringLength($data, $min_rang, $max_rang)
  88. {
  89.     if (mb_strlen($data, 'utf-8') >= $min_rang && mb_strlen($data, 'utf-8') <= $max_rang) {
  90.         return true;
  91.     } else {
  92.         return false;
  93.     }
  94. }
  95.  
  96. // Проверка была ли отправлена форма
  97. function form_sub($form_name)
  98. {
  99.     if (!isset($_POST[$form_name])) {
  100.         return false;
  101.     }
  102.     return true;
  103. }
  104.  
  105. // ФУНКЦИИ ВТОРОГО УРОВНЯ
  106. // Обработка поля
  107. function prepareField($form_name, $min_rang, $max_rang)
  108. {
  109.     $data = $_POST[$form_name];
  110.     if (form_sub($form_name) == false) {
  111.         return false;
  112.         exit;
  113.     } else {
  114.         if (stringLength($data, $min_rang, $max_rang) == false) {
  115.             return null;
  116.             exit;
  117.         } else {
  118.             $data = sanitize($data);
  119.             if (stringLength($data, $min_rang, $max_rang) == false) {
  120.                 return null;
  121.                 exit;
  122.             } else
  123.                 return $data;
  124.         }
  125.     }
  126. }
  127.  
  128. function Errors($error)
  129. {
  130.     switch ($error) {
  131.         case 404:
  132.             return '<br /><br />Ошибка 404: Страница не найдена!<br /><a href="/">В начало...</a><br /><br />';
  133.             break;
  134.         case 'length':
  135.             return 'Одно из полей слишком короткое или слишком длинное!<br />Попробуйте изменить вводимые данные.<br /><br />';
  136.             break;
  137.         case 'no':
  138.             return 'Неизвестная ошибка. Что-то пошло не так.<br />Попробуйте изменить вводимые данные.<br /><br />';
  139.             break;
  140.         default:
  141.             break;
  142.     }
  143. }
  144.  
  145. function selfURL()
  146. {
  147.     if (!isset($_SERVER['REQUEST_URI']))
  148.         $suri = $_SERVER['PHP_SELF'];
  149.     else
  150.         $suri = $_SERVER['REQUEST_URI'];
  151.     $s  = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
  152.     $sp = strtolower($_SERVER["SERVER_PROTOCOL"]);
  153.     $pr = substr($sp, 0, strpos($sp, "/")) . $s;
  154.     $pt = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":" . $_SERVER["SERVER_PORT"]);
  155.     return $pr . "://" . $_SERVER['SERVER_NAME'] . $pt . $suri;
  156. }
  157.  
  158. // ФУНКЦИИ ПЕРВОГО УРОВНЯ (именно в них вызов функций 2го уровня)
  159. // Функция записи поста в файл в должном виде
  160. function writePost($base_dir)
  161. {
  162.     $name = prepareField('name', 3, 30);
  163.     $text = prepareField('text', 10, 600);
  164.     if ($name != '' && $text != '') {
  165.         $data = $text . ' (' . $name . ')';
  166.         $data = serialize($data);
  167.         $data = $data . "\n";
  168.         file_put_contents($base_dir, $data, FILE_APPEND);
  169.         unset($data);
  170.     } else
  171.         return Errors('no');
  172.     ;
  173. }
  174.  
  175. // Чтение всех постов
  176. function readPosts($base_dir, $pp)
  177. {
  178.     $data = file($base_dir);
  179.     if ($data == '') {
  180.         return null;
  181.     } else {
  182.         $i = 0;
  183.         krsort($data);
  184.         $posts_num = count($data);
  185.         $start     = isset($_GET['start']) && ctype_digit($_GET['start']) ? $_GET['start'] : 0;
  186.         $posts     = array_slice($data, $start, $pp);
  187.         foreach ($posts as $post) {
  188.             $post         = unserialize($post);
  189.             $db_posts[$i] = $post;
  190.             $i++;
  191.         }
  192.         if (!isset($db_posts) or $db_posts == '') {
  193.             return null;
  194.         } else
  195.             return $db_posts;
  196.     }
  197. }
  198.  
  199. function countPosts($base_dir, $pp)
  200. {
  201.     $data = file($base_dir);
  202.     if ($data == '') {
  203.         return null;
  204.     } else {
  205.         $posts_num = count($data);
  206.         return $posts_num;
  207.     }
  208. }
  209.  
  210. if (isset($_POST['name'])) {
  211.     writePost($base);
  212.     unset($_POST['name']);
  213.     unset($_POST['text']);
  214. }
  215.  
  216. function adminAuth()
  217. {
  218.     $passhash = getParam('PASSHASH');
  219.     if (isset($_SESSION['admin']) && $_SESSION['admin'] == $passhash)
  220.     {
  221.         if(isset($_GET['exit']))
  222.         {
  223.             session_destroy();
  224.             Header("Location: /");
  225.         }
  226.         $logout = '<a href="?exit" id="logout">Выйти</a>';
  227.         $form_mess = '<br /><form action="./" method="post"><div class="info">Осталось символов:&nbsp;<span id="counter">600 / 600</span></div><textarea name="text" id="text" rows="3" maxlength ="600" autofocus required placeholder="Скопируйте или напишите цитату в это поле. Максимальное количество символов - 600." onclick="length_check(600, \'text\', \'counter\')" onkeyup="length_check(600, \'text\', \'counter\')" class="area"></textarea><br /><input type="text" name="name" maxlength ="30" size="51" value="" required placeholder="Укажите автора цитаты" class="area" /><input type="reset" name="reset" value="Очистить" class="new"><input type="submit" name="submit" value="Добавить" class="new1"></form>';
  228.         return $logout.$form_mess;
  229.     }
  230.     else
  231.     {
  232.         if(isset($_POST['pass']))
  233.         {
  234.             $pass = $_POST['pass'];
  235.             $pass = sanitize($pass);
  236.             $mdpass = md5($pass);
  237.             if($mdpass == $passhash)
  238.             {
  239.                 $_SESSION['admin'] = $passhash;
  240.                 Header("Location: /");
  241.             }
  242.             else
  243.             {
  244.                 Header("Location: /");
  245.             }
  246.         }
  247.         else
  248.         {
  249.         $auth_form = '<form name="auth" action="./" method="post">Пароль: <input type="password" id="pass" name="pass" autofocus required /><input type="submit" value="Войти" /></form>';
  250.         return $auth_form;
  251.         }
  252.     }
  253. }
  254.  
  255. $post = readPosts($base, $pp);
  256.  
  257. include_once('core/template/main.html');
  258.  
  259. ob_flush(); // Замыкаем хедеры
  260. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement