<?php
$message_md5 = 'FVf48FCd43yhfdvfFV'; //шифрования для разных функций (Соль для мд5 паролей юзеров в базе)

function pass_hash($password){
    $str = md5(base64_encode(sha1(trim($password))));
    return substr(strtoupper($str),1,20);
}

//Узнаем IP пользователя
if ( !function_exists( 'real_IP' ) ) {
    function real_IP() {
        if ( !empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
            $ip = $_SERVER['HTTP_CLIENT_IP'];
        }
        if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
        } else {
            $ip = $_SERVER['REMOTE_ADDR'];
        }
        if ( strpos( $ip, ',' ) !== false ) {
            $r_ip = explode( ',', $ip );
            $ip = $r_ip[0];
        }

        if ( !preg_match( "#^(10|172\.16|192\.168)\.#", $ip ) ) {
            return $ip;
        } else {
            return $_SERVER['REMOTE_ADDR'];
        }
    }
}


function clean($var){
        $replace = array(
      '"' => '',
      "'" => '',
      '`' => '',
      '{' => '',
      '}' => '',
      '<' => '',
      '>' => '',
      '%' => '',
      '$' => '',
      '\\' => '',
      '+' => '',
      '-' => '',
      '*' => '',
      '№' => '',
      '#' => '',
      '@' => '',
      '!' => '',
      '&' => '',
      '^' => '',
      ':' => '',
      ';' => '',
      '(' => '',
      ')' => '',
      '.' => '',
      '\0' => '',
      '%00' => ''
      );

        return @htmlspecialchars(str_replace(array_keys($replace), array_values($replace), trim($var)));
        unset($var, $replace);
    }


 function get_filesize($file)
{
    // идем файл
    if(!file_exists($file)) return "Файл  не найден";
   // теперь определяем размер файла в несколько шагов
  $filesize = filesize($file);
   // Если размер больше 1 Кб
   if($filesize > 1024)
   {
       $filesize = ($filesize/1024);
       // Если размер файла больше Килобайта
       // то лучше отобразить его в Мегабайтах. Пересчитываем в Мб
       if($filesize > 1024)
       {
            $filesize = ($filesize/1024);
           // А уж если файл больше 1 Мегабайта, то проверяем
           // Не больше ли он 1 Гигабайта
           if($filesize > 1024)
           {
               $filesize = ($filesize/1024);
               $filesize = round($filesize, 1);
               return $filesize." ГБ";
           }
           else
           {
               $filesize = round($filesize, 1);
               return $filesize." MБ";
           }
       }
       else
       {
           $filesize = round($filesize, 1);
           return $filesize." Кб";
       }
   }
   else
   {
       $filesize = round($filesize, 1);
       return $filesize." байт";
   }
}


//склонение слов
function getWord( $number, $suffix ) {
    $keys = array( 2, 0, 1, 1, 1, 2 );
    $mod = $number % 100;
    $suffix_key = ( $mod > 7 && $mod < 20 ) ? 2: $keys[min( $mod % 10, 5 )];
    return $suffix[$suffix_key];
}


//фильтрация
function check_text( $text ) {
	$text = strip_tags( $text );
	$text = str_replace( '<', '', $text );
    $text = str_replace( '>', '', $text );
    $text = str_replace( '"', '', $text );
    $text = str_replace( "'", '', $text );
    $text = preg_replace('#[s|S|\s+][c|C|\s+][r|R|\s+][i|I|\s+][p|P|\s+][t|T]#is', '', $text);
    ///$text = preg_replace('#[p|P|\p+][h|H|\h+][p|P|]#is', '', $text);
    //$text = preg_replace('#[s|S][c|C][r|R][i|I][p|P][t|T]#is', '', $text);
	$text = trim( $text );
    $text = htmlspecialchars( $text );
	return iconv( 'UTF-8', 'UTF-8', $text );
}

//Генерация кода для восстановление пароля или активации аккаунта
function generate( $number ) {
    $arr = array( 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9','0' );
    // Генерируем
    $pass = "";
    for( $i = 0; $i < $number; $i++ ) {
        // Вычисляем случайный индекс массива
        $index = rand( 0, count( $arr ) - 1 );
        $pass .= $arr[$index];
    }
    return $pass;
}


function clean_get($str){
    if(@ini_get('magic_quotes_gpc')=='1'){
        $str = stripslashes($str);
    }
    $str = strip_tags(trim(preg_replace('/\s+/',' ',$str)));
    $_pattern = array('<', '>', '+', '"', "'", 'union','&');
    $_replace = array('',  '',  '',  '',  '',  '', '[reserve_1]');
    $str = str_ireplace($_pattern, $_replace, $str);
    $str = @htmlspecialchars($str);
    $str = str_replace('[reserve_1]', '&', $str);
    return $str;
}

//обрезка длинных слов в заголовках, титлах
function wraptitle( $text, $kol ) {
    return preg_replace( '/([^\s]{' . $kol . '})[^\s]+/', '$1', $text );
}



//навигация
function navigation( $num/*кол-во выводимой инфы*/, $pg/*$_GET['p']*/, $allpage/*всего страниц*/, $query/*url запрос*/ ) {

    if ( $allpage == 0 ) $page = 0; else $page = ( int ) $pg;
    $allpage = ceil( $allpage / $num );
    if ( $allpage == 0 ) $page = 0; else
    if ( $page <= 1 ) $page = 1; else
    if ( $page >= $allpage) $page = $allpage;
    $total = $allpage;

    //Формируем навигацию
    if ( $page - 4 > 0 ) $page4left = '<a href="' . $query . ($page - 4) . '" onclick="Page.Go(this.href); return false;">' . ($page - 4) . '</a>';
    if ( $page - 3 > 0 ) $page3left = '<a href="' . $query . ($page - 3) . '" onclick="Page.Go(this.href); return false;">' . ($page - 3) . '</a>';
    if ( $page - 2 > 0 ) $page2left = '<a href="' . $query . ($page - 2) . '" onclick="Page.Go(this.href); return false;">' . ($page - 2) . '</a>';
    if ( $page - 1 > 0 ) $page1left = '<a href="' . $query . ($page - 1) . '" onclick="Page.Go(this.href); return false;">' . ($page - 1) . '</a>';

    if ( $page + 4 <= $total ) $page4right = '<a href="' . $query . ($page + 4) . '" onclick="Page.Go(this.href); return false;">' . ($page + 4) . '</a>';
    if ( $page + 3 <= $total ) $page3right = '<a href="' . $query . ($page + 3) . '" onclick="Page.Go(this.href); return false;">' . ($page + 3) . '</a>';
    if ( $page + 2 <= $total ) $page2right = '<a href="' . $query . ($page + 2) . '" onclick="Page.Go(this.href); return false;">' . ($page + 2) . '</a>';
    if ( $page + 1 <= $total ) $page1right = '<a href="' . $query . ($page + 1) . '" onclick="Page.Go(this.href); return false;">' . ($page + 1) . '</a>';

    if ( $page == 0 ) {
        $userpage = '';
    } else
    if ( $page == 1 and $page == $total ) {
        $userpage = '<span class="navpage_for"><span class="curent_page_for">' . $page . '</span> ' . $page1right . ' ' . $page2right . '</span>';
    } else
    if ( $page == 1 and $total == 2 ) {
        $userpage = '<span class="navpage_for"><span class="curent_page_for">' . $page . '</span> ' . $page1right . ' ' . $page2right . '</span>';
    } else
    if ( $page == 1 ) {
        $userpage = '<span class="navpage_for"><span class="curent_page_for">' . $page . '</span> ' . $page1right . ' ' . $page2right . ' <a href="' .$query . $total . '" onclick="Page.Go(this.href); return false;">»</a></span>';
    } else
    if ( $page == 2 and $page == $total ) {
        $userpage = '<span class="navpage_for">' . $page1left . ' <span class="curent_page_for">' . $page . '</span> ' . $page1right . ' ' . $page2right . '</span>';
    } else
    if ( $page == 2 ) {
        $userpage = '<span class="navpage_for">' . $page1left . ' <span class="curent_page_for">' . $page . '</span> ' . $page1right . ' ' . $page2right . ' <a href="' .$query . $total . '" onclick="Page.Go(this.href); return false;">»</a></span>';
    } else
    if ( $page == $total - 1 ) {
        $userpage = '<span class="navpage_for"><a href="' .$query . '1" onclick="Page.Go(this.href); return false;">«</a> ' . $page2left . ' ' . $page1left . ' <span class="curent_page_for">' . $page . '</span> ' . $page1right . '</span>';
    } else
    if ( $page == $total ) {
        $userpage = '<span class="navpage_for"><a href="' .$query . '1" onclick="Page.Go(this.href); return false;">«</a> ' . $page2left . ' ' . $page1left . ' <span class="curent_page_for">' . $page . '</span></span>';
    } else {
        $userpage = '<span class="navpage_for"><a href="' .$query . '1" onclick="Page.Go(this.href); return false;">«</a> ' . $page2left . ' ' . $page1left . ' <span class="curent_page_for">' . $page . '</span> ' . $page1right . ' ' . $page2right . ' <a href="' .$query . $total . '" onclick="Page.Go(this.href); return false;">»</a></span>';
    }

    return '<div class="navigation_for">' . $userpage . '</div>';
}


//изменение ссылок для проверки на Dr.web
function get_url( $text ) {
    //preg_match_all( '#\b(http\:\/\/)?(https\:\/\/)?^(?!@)([a-zA-Z0-9\.])+([a-zA-Z0-9\-])+(\.)([a-zA-Z0-9]{2,5})?([a-zA-Z0-9\?\&\-\=\/\.\_]{2,})#', $text, $result );
    $text = preg_replace( '#\b(http\:\/\/)?(https\:\/\/)?([a-zA-Z0-9\.])+([a-zA-Z0-9\-])+(\.)([a-zA-Z0-9]{2,5})?([a-zA-Z0-9\?\&\-\=\/\.\_]{2,})#', '<a href="$0" onclick="forum_drweb(this.href);return false;" class="a_box">$0</a>', $text );

    $text = preg_replace( '#(href\=\")(([a-zA-Z0-9\.])+([a-zA-Z0-9\-])+(\.)([a-zA-Z0-9]{2,5})?([a-zA-Z0-9\?\&\-\=\/\.\_]{2,}))(\")#', 'href="http://$2"', $text );

    return $text;
}
?>