//Текушая реальная директория
function getRealDir(){
	return $curRealDir = substr($_SERVER["REAL_FILE_PATH"], 0, strrpos($_SERVER["REAL_FILE_PATH"], "/")+1);	
}

function isValidPhone($phone) {
    return preg_match("/^(?:\+?[7,8][-. ]?)?\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{2})[-. ]?([0-9]{2})$/", $phone);
}

function CheckPhone($phone){	
	if (strlen(($phone) > 0)
	{
		$phone = str_replace(" ", "", $phone);
		$phone = str_replace("(", "", $phone);
		$phone = str_replace(")", "", $phone);
		$phone = str_replace("-", "", $phone);
		$phone = str_replace("_", "", $phone);
		$phone = str_replace("+7", "", $phone);
			
		if (strlen($phone) == 10)
		{
			return true;		
		}else return false
	}	
}

function isAjax() {
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
}

function getNumEnding($number, $endingArray)
{
    $number = $number % 100;
    if ($number>=11 && $number<=19) {
        $ending=$endingArray[2];
    }
    else {
        $i = $number % 10;
        switch ($i)
        {
	 case (1): $ending = $endingArray[0]; break;
	 case (2):
	 case (3):
	 case (4): $ending = $endingArray[1]; break;
	 default: $ending=$endingArray[2];
        }
    }
    return $ending;
}

function rus_date() {
	// Перевод
	 $translate = array(
	 "am" => "дп",
	 "pm" => "пп",
	 "AM" => "ДП",
	 "PM" => "ПП",
	 "Monday" => "Понедельник",
	 "Mon" => "Пн",
	 "Tuesday" => "Вторник",
	 "Tue" => "Вт",
	 "Wednesday" => "Среда",
	 "Wed" => "Ср",
	 "Thursday" => "Четверг",
	 "Thu" => "Чт",
	 "Friday" => "Пятница",
	 "Fri" => "Пт",
	 "Saturday" => "Суббота",
	 "Sat" => "Сб",
	 "Sunday" => "Воскресенье",
	 "Sun" => "Вс",
	 "January" => "Января",
	 "Jan" => "Янв",
	 "February" => "Февраля",
	 "Feb" => "Фев",
	 "March" => "Марта",
	 "Mar" => "Мар",
	 "April" => "Апреля",
	 "Apr" => "Апр",
	 "May" => "Мая",
	 "May" => "Мая",
	 "June" => "Июня",
	 "Jun" => "Июн",
	 "July" => "Июля",
	 "Jul" => "Июл",
	 "August" => "Августа",
	 "Aug" => "Авг",
	 "September" => "Сентября",
	 "Sep" => "Сен",
	 "October" => "Октября",
	 "Oct" => "Окт",
	 "November" => "Ноября",
	 "Nov" => "Ноя",
	 "December" => "Декабря",
	 "Dec" => "Дек",
	 "st" => "ое",
	 "nd" => "ое",
	 "rd" => "е",
	 "th" => "ое"
	 );
	// если передали дату, то переводим ее
	if (func_num_args() > 1) {
	$timestamp = func_get_arg(1);
	return strtr(date(func_get_arg(0), $timestamp), $translate);
	} else {
   // иначе текущую дату
	return strtr(date(func_get_arg(0)), $translate);
	}
}
 

// Загружает файлы и вернет масив имена реальный путь файлов

function Upload_Files($uploaddir, $filename){

	foreach($_FILES[$filename]['error'] as $k=>$v)
		{
			$uploadfile = $uploaddir. basename($_FILES['FILES']['name'][$k]);				
			if(move_uploaded_file($_FILES[$filename]['tmp_name'][$k], $uploadfile)) 
				{
					$arFiles[]= $_FILES[$filename]['name'][$k];
				}
		}
				
	return $arFiles;

}

function Create_Archive($tmpdir, $uploaddir, $arFiles, $outfilename){

		if(extension_loaded('zip')){

			$zip = new ZipArchive();			
			$zip_name = $uploaddir.$outfilename.".zip";
					
			$zip->open($zip_name, ZIPARCHIVE::CREATE);
						
			if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){
				$result['errors'] = "Error, ZIP creation failed at this time\n";
			}
					
			foreach($arFiles as $file){
				$zip->addFile($tmpdir.$file, $file);
			}
						
			$zip->close();		
						
			if(file_exists($zip_name)){					
				return $zip_name;
			}					
					
		}else echo "You dont have ZIP extension";

}



function grd($name, $type = 'str') { // -- данные из REQUEST --
	global $_REQUEST;
	if (!isset($_REQUEST[$name])) return null;
	$result = null;
	if (is_array($_REQUEST[$name])) $result = grd_array($_REQUEST[$name], $type);
	else {
		$result = strip_tags(trim($_REQUEST[$name]));
		if ($type == 'str') $result = addslashes($result);
		elseif ($type == 'int') $result = intval($result);
	}
	return $result;
}


function gcd($name, $type = 'str', $json_decode = false) { // -- данные из COOKIE --
	global $_COOKIE;
	$data = $json_decode ? json_decode($_COOKIE[$name]) : $_COOKIE[$name];
	if (!isset($data)) return null;
	if (is_array($data)) $result = grd_array($data, $type);
	else if (is_object($data)) $result = grd_object($data, $type);
	else {
		$result = strip_tags(trim($data));
		if ($type == 'str') $result = addslashes($result);
		elseif ($type == 'int') $result = intval($result);
	}
	return $result;
}


function cleanInput($input) { 
  $search = array(
    '@<script[^>]*?>.*?</script>@si',   // Удаляем javascript
    '@&lt;;[\/\!]*?[^&lt;&gt;]*?&gt;@si', // Удаляем HTML теги
    '@<style[^>]*?>.*?</style>@siU',    // Удаляем теги style
    '@@'         // Удаляем многострочные комментарии
  );
  $output = preg_replace($search, '', $input);
  return $output;
}


function sanitize($input) {
    if (is_array($input)) {
        foreach($input as $var=&gt;$val) {
 $output[$var] = sanitize($val);
        }
    }
    else {
        if (get_magic_quotes_gpc()) {
 $input = stripslashes($input);
        }
        $input  = cleanInput($input);
        $output = mysql_real_escape_string($input);
    }
    return $output;
}


function grd_array($var, $type) {
	foreach ($var as $k =&gt; $v) {
		if (is_array($v)) $result[$k] = grd_array($v, $type);
		else if (is_object($v)) $result[$k] = grd_object($v, $type);
		else {
			$result[$k] = strip_tags(trim($v));
			if ($type == 'str') @$result[$k] = addslashes($v);
			elseif ($type == 'int') @$result[$k] = intval($v);
		}
	}
	return $result;
}


function grd_object($var, $type) {
	foreach (get_object_vars($var) as $k =&gt; $v) {
		if (is_array($v)) $var-&gt;$k = grd_array($v, $type);
		else if (is_object($v)) $var-&gt;$k = grd_object($v, $type);
		else {
			$var-&gt;$k = strip_tags(trim($v));
			if ($type == 'str') @$var-&gt;$k = addslashes($v);
			elseif ($type == 'int') @$var-&gt;$k = intval($v);
		}
	}
	return $var;
}


function right_date_format($datestr, $to_mysql = false, $return_delimeter = null) {
	if (!$datestr) return null;
	if (is_int($datestr)) $datestr = date('Y-m-d', $datestr);
	$delimeter = $to_mysql ? '-' : '.';
	$date = explode(($to_mysql ? '.' : '-'), $datestr);
	if ($return_delimeter) $delimeter = $return_delimeter;
	return $date[2].$delimeter.$date[1].$delimeter.$date[0];
}


function right_date($datestr, $time = null, $m_upper = false) {
	if (!$datestr) return null;
	if ($m_upper) $monthes = array('Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря');
	else $monthes = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря');
	if (is_string($datestr)) {
		if (mb_strlen($datestr) &gt; 10) {
			if ($time) $time = mb_substr($datestr, 11);
			else $datestr = mb_substr($datestr, 0, 10);
		}
		$date = explode('-', $datestr);
	} else {
		$date_string = date('Y-m-d H:i', $datestr);
		if ($time) $time = mb_substr($date_string, 11);
		else $date_string = mb_substr($date_string, 0, 10);
		$date = explode('-', $date_string);
	}
	return $date[2].' '.$monthes[intval($date[1])-1].' '.$date[0].($time ? ' '.$time : null);
}


function format_date($date, $time = null, $type = null) { // -- форматирует дату --
    $out_date = $out_time = null;
    if (strstr($date,':')) $out_time = ' '.substr($date, 11, 10);
    if ((int)substr($date, 8, 2)) $out_date .= substr($date,8,2).".";
    if ((int)substr($date, 5, 2)) $out_date .= substr($date,5,2).".";
    if ((int)substr($date, 0, 4)) $out_date .= substr($date,0,4);
    if ($type) {
        $out_date .= " ".substr($date, 11, 2).":";
        $out_date .= "".substr($date, 14, 2);
    }
    return $out_date.($time ? $out_time : '');
}


function timeformat($time=NULL) 
{
    $labelTime = date('d.m.Y', $time); 
 
    $arrM = array( 
      '01'=&gt;'янв', '02'=&gt;'фев', '03'=&gt;'мар', '04'=&gt;'апр',  
      '05'=&gt;'май', '06'=&gt;'июн', '07'=&gt;'июл', '08'=&gt;'авг',  
      '09'=&gt;'сен', '10'=&gt;'окт', '11'=&gt;'ноя', '12'=&gt;'дек'
    ); 
 
    if ($labelTime == date('d.m.Y')) { 
      return 'Сегодня в '.date('H:i', $time); 
    } elseif ($labelTime == (date('d') - 1).'.'.date('m.Y')) { 
      return 'Вчера в '.date('H:i', $time); 
    } else { 
    return date('d', $time).' '.$arrM[date('m', $time)].' '.date('Y', $time).' в '.date('H:i', $time); 
    } 
}   


function create_slug($string){
   $string = strtolower($string);
   $slug=preg_replace('/[^a-z0-9-]+/', '-', $string);
   return $slug;
}
	

function generate_password($length = 20){
	$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789``-=~!@#$%^&amp;*()_+,./&lt;&gt;?;:[]{}\|';
	$max = mb_strlen($chars) - 1;
	for ($i = 0; $i &lt; $length; $i++) $str .= $chars[rand(0, $max)];	
	return $str;
}


// Сохранение контента в файл
function Save_File($file, $content)
{
    return (file_put_contents($file, stripslashes($content)));
}

//Дата по русский
//echo rusdate(time(), '%dayweek%, j %month% Y, G:i');
function rusdate($d, $format = 'j %month% Y', $offset = 0){
	$montharray = array('Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря');
	$dayarray=array('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье');
	$d += 3600*$offset;
	$sarray = array('/%month%/i', '/%dayweek%/i');
	$rarray = array($montharray[date("m", $d)-1], $dayarray[date("N", $d)-1]);
	$format = preg_replace($sarray, $rarray, $format);
	return date($format, $d);
}

//Получаем реальный IP
function GetRealIP() {
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) $ip = $_SERVER['HTTP_CLIENT_IP'];
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else $ip = $_SERVER['REMOTE_ADDR'];
    return $ip;
}

//Определения города в PHP
function detect_city($ip) {
        $default = 'UNKNOWN';

        if (!is_string($ip) || strlen($ip) &lt; 1 || $ip == '127.0.0.1' || $ip == 'localhost')
 $ip = '8.8.8.8';

        $curlopt_useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)';

        $url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip);
        $ch = curl_init();

        $curl_opt = array(
		 CURLOPT_FOLLOWLOCATION  =&gt; 1,
		 CURLOPT_HEADER      =&gt; 0,
		 CURLOPT_RETURNTRANSFER  =&gt; 1,
		 CURLOPT_USERAGENT   =&gt; $curlopt_useragent,
		 CURLOPT_URL       =&gt; $url,
		 CURLOPT_TIMEOUT         =&gt; 1,
		 CURLOPT_REFERER         =&gt; 'http://' . $_SERVER['HTTP_HOST'],
        );

        curl_setopt_array($ch, $curl_opt);

        $content = curl_exec($ch);

        if (!is_null($curl_info)) {
			$curl_info = curl_getinfo($ch);
        }

        curl_close($ch);

        if ( preg_match('{<br>City : ([^&lt;]*)<br>}i', $content, $regs) )  {
		$city = $regs[1];
        }
        if ( preg_match('{<br>State/Province : ([^&lt;]*)<br>}i', $content, $regs) )  {
		$state = $regs[1];
        }

        if( $city!='' &amp;&amp; $state!='' ){
          $location = $city . ', ' . $state;
          return $location;
        }else{
          return $default;
        }

}

//Whois на PHP
function whois_query($domain) { 
	// исправляем доменное имя:
	 $domain = strtolower(trim($domain));
	 $domain = preg_replace('/^http:\/\//i', '', $domain);
	 $domain = preg_replace('/^www\./i', '', $domain);
	 $domain = explode('/', $domain);
	 $domain = trim($domain[0]);
	 
	$_domain = explode('.', $domain);
	 $lst = count($_domain)-1;
	 $ext = $_domain[$lst];
	 
	$servers = array(
	 "biz" =&gt; "whois.neulevel.biz",
	 "com" =&gt; "whois.internic.net",
	 "us" =&gt; "whois.nic.us",
	 "coop" =&gt; "whois.nic.coop",
	 "info" =&gt; "whois.nic.info",
	 "name" =&gt; "whois.nic.name",
	 "net" =&gt; "whois.internic.net",
	 "gov" =&gt; "whois.nic.gov",
	 "edu" =&gt; "whois.internic.net",
	 "mil" =&gt; "rs.internic.net",
	 "int" =&gt; "whois.iana.org",
	 "ac" =&gt; "whois.nic.ac",
	 "ae" =&gt; "whois.uaenic.ae",
	 "at" =&gt; "whois.ripe.net",
	 "au" =&gt; "whois.aunic.net",
	 "be" =&gt; "whois.dns.be",
	 "bg" =&gt; "whois.ripe.net",
	 "br" =&gt; "whois.registro.br",
	 "bz" =&gt; "whois.belizenic.bz",
	 "ca" =&gt; "whois.cira.ca",
	 "cc" =&gt; "whois.nic.cc",
	 "ch" =&gt; "whois.nic.ch",
	 "cl" =&gt; "whois.nic.cl",
	 "cn" =&gt; "whois.cnnic.net.cn",
	 "cz" =&gt; "whois.nic.cz",
	 "de" =&gt; "whois.nic.de",
	 "fr" =&gt; "whois.nic.fr",
	 "hu" =&gt; "whois.nic.hu",
	 "ie" =&gt; "whois.domainregistry.ie",
	 "il" =&gt; "whois.isoc.org.il",
	 "in" =&gt; "whois.ncst.ernet.in",
	 "ir" =&gt; "whois.nic.ir",
	 "mc" =&gt; "whois.ripe.net",
	 "to" =&gt; "whois.tonic.to",
	 "tv" =&gt; "whois.tv",
	 "ru" =&gt; "whois.ripn.net",
	 "org" =&gt; "whois.pir.org",
	 "aero" =&gt; "whois.information.aero",
	 "nl" =&gt; "whois.domain-registry.nl"
	 );
	 
	if (!isset($servers[$ext])){
	 die('Error: No matching nic server found!');
}
 
$nic_server = $servers[$ext];
 
$output = '';
 
 if ($conn = fsockopen ($nic_server, 43)) {
	 fputs($conn, $domain."\r\n");
	 while(!feof($conn)) {
		$output .= fgets($conn,128);
	 }
	 fclose($conn);
 }
 else { die('Error: Could not connect to ' . $nic_server . '!'); }
 
return $output;
}

//Получаем файл
function Get_File($file)
{
    return file_get_contents($file);
}

//Сохраняем файл
function Save_File($file, $content)
{
    return (file_put_contents($file, stripslashes($content)));
}

function strtoSafe(){
	 $result = stripslashes($result); // удаляем слэши
	 $result = str_replace('#39;', '', $result); // удаляем одинарные кавычки
	 $result = str_replace('"', '', $result); // удаляем двойные кавычки
	 $result = str_replace('&amp;', '', $result); // удаляем амперсанд
	 $result = preg_replace('/([?!:^~|@№$–=+*&amp;%.,;\[\]&lt;&gt;()_—«»#\/]+)/', '', $result); // удаляем недоспустимые символы
	 $result = trim($result); // удаляем пробелы по бокам
	 $result = preg_replace('/ +/', '-', $result); // пробелы заменяем на минусы
	 $result = preg_replace('/-+/', '-', $result); // удаляем лишние минусы
	 $result = preg_replace('/([-]*)(.+)([-]*)/', '\\2', $result); // удаляем лишние минусы
}

//Проверка Email на привильность на PHP
function emailValid($string){ 
    if (preg_match ("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+\.[A-Za-z]{2,6}$/", $string)) 
    return true; 
}

//Обрезаем текст правильно
function cropStr($str, $size){ 
  return mb_substr($str,0,mb_strrpos(mb_substr($str,0,$size,'utf-8'),' ',utf-8),'utf-8');
}


function getUserIp() {
  if ( isset($_SERVER['HTTP_X_REAL_IP']) )
  {
    $ip = $_SERVER['HTTP_X_REAL_IP'];
  } else $ip = $_SERVER['REMOTE_ADDR'];
 
  return $ip;
}

function getWord($number, $suffix) {
	$keys = array(2, 0, 1, 1, 1, 2);
	$modern = $number%100;
	$suffix_key = ($modern &gt; 7 &amp;&amp; $modern &lt; 20) ?2:
	$keys[min($modern%10, 5)];
	return $suffix[$suffix_key];
}

$arraymin = array("минута", "минуты", "минут");
//создали массив для минут
$arrayhour = array("час", "часа", "часов");
//создали массив для часов
$datemin = date('i');
$datehour = date('H');
//создали переменные времени: часы и минуты раздельно, для удобства
$hour = getWord($datehour, $arrayhour);
$min = getWord($datemin, $arraymin);
//ну и, собственно, сам вывод
echo "".$datehour." ".$hour." ".$datemin." ".$min."";
//в результате получаем: 14 часов 16 минут

	
//Нормализируем и делаем текст безопасным для вставки в базу
function ProcessText($text)
{
    $text = trim($text); // удаляем пробелы по бокам
    $text = stripslashes($text); // удаляем слэши
    $text = htmlspecialchars($text); // переводим HTML в текст
    $text = preg_replace("/ +/", " ", $text); // множественные пробелы заменяем на одинарные
    $text = preg_replace("/(\r\n){3,}/", "\r\n\r\n", $text); // убираем лишние переводы строк (больше 1 строки)
    $test = nl2br ($text); // заменяем переводы строк на тег
    $text = preg_replace("/^\"([^\"]+[^=&gt;&lt;])\"/u", "$1«$2»", $text); // ставим людские кавычки
    $text = preg_replace("/(«){2,}/","«",$text); // убираем лишние левые кавычки (больше 1 кавычки)
    $text = preg_replace("/(»){2,}/","»",$text); // убираем лишние правые кавычки (больше 1 кавычки)      
    $text = preg_replace("/(\r\n){2,}/u", "<br><br>", $text); // ставим абзацы
    return $text; //возвращаем переменную
}

function GetBasePath() {
    return substr($_SERVER['SCRIPT_FILENAME'], 0, strlen($_SERVER['SCRIPT_FILENAME']) - strlen(strrchr($_SERVER['SCRIPT_FILENAME'], "\\")));
}


function GetURI(){
  $this_page = basename($_SERVER['REQUEST_URI']);
  if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page));
  return $this_page;
}

//Удаляем лишние из входных данных
function clearspecchars($str){
  $str = str_replace(',','',$str);
  $str = str_replace('\'','',$str);
  $str = str_replace('\\','',$str);
  $str = str_replace('/','',$str);
  $str = stripslashes(trim($str));
  $str = htmlspecialchars($str);
  return $str;
}

//Проверка номера телефона на PHP
function check_phone(){
    preg_match_all("/\(?  (\d{3})?  \)?  (?(1)  [\-\s] ) \d{3}-\d{4}/x",
     "Call 555-1212 or 1-800-555-1212", $phones);
}

//Проверка номера телефона на PHP
function checkPhone($number)
{
    if(preg_match('^[0-9]{3}+-[0-9]{3}+-[0-9]{4}^', $number)){
        return $number;
    } else {
        $items = Array('/\ /', '/\+/', '/\-/', '/\./', '/\,/', '/\(/', '/\)/', '/[a-zA-Z]/');
        $clean = preg_replace($items, '', $number);
        return substr($clean, 0, 3).'-'.substr($clean, 3, 3).'-'.substr($clean, 6, 4);
    }
}

//Делаем текст безопасным для вставки в базу новости стати и тд
function filter_secure_text($text){
  // Фильтрация опасных слов
  if (!preg_match("/script|http|&lt;|&gt;|&lt;|&gt;|SELECT|UNION|UPDATE|exe|exec|INSERT|tmp/i",$text))
  {
   die("ne dopustimie slova");
  }
}


function check_host_ip(){
  $ip = "yandex.ru";

  if(preg_match('/(\d+).(\d+).(\d+).(\d+)/',$ip))
    $host = gethostbyaddr($ip);
  else
    $host = gethostbyname($ip);

  echo $host;
}


function link_clikabel(){
 $stringa = " bla bla bla http://www.example.com bla bla http://www.example.net bla bla bla";

 $m = preg_match_all('/http:\/\/[a-z0-9A-Z.]+(?(?=[\/])(.*))/', $stringa, $match);

   if ($m) {
      $links=$match[0];
      for ($j=0;$j&lt;$m;$j++) {
          $stringa=str_replace($links[$j],''.$links[$j].'',$stringa);
      }
   }
}

//Проверка электроноого адреса на PHP
function check_mail($email){
  $email = "phil.taylor@a_domain.tv";

    if (preg_match("/^[^@]*@[^@]*\.[^@]*$/", $email)) {
 return "E-mail address";
    }
}


//Проверка электроноого адреса на PHP
function valid_email($email){
  if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
      echo "E-mail is not valid";
  } else {
      echo "E-mail is valid";
  }
}


function check_abcnum($text){
  // Проверяем все символы на буквы и цифры
  /// /[^(\w)|(\x7F-\xFF-)|(\s)]/  англиские , русские буквы и цыфры
  if( !( preg_match("/^([a-z0-9]*)$/i", $text) ) )
     {
     die("veli nepravilnie simvloi");
    }
}


function isfile($file){
    return preg_match('/^[^.^:^?^\-][^:^?]*\.(?i)' . getexts() . '$/',$file);
    //first character cannot be . : ? - subsequent characters can't be a : ?
    //then a . character and must end with one of your extentions
    //getexts() can be replaced with your extentions pattern
}

function getexts(){
    //list acceptable file extensions here
    return '(app|avi|doc|docx|exe|ico|mid|midi|mov|mp3|
      mpg|mpeg|pdf|psd|qt|ra|ram|rm|rtf|txt|wav|word|xls)';
}

//Проверка правильность IP адреса
function valid_ip($ip) {
    return preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" .
 "(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/", $ip);
}


function fixtags($text){
	$text = htmlspecialchars($text);
	$text = preg_replace("/=/", "=\"\"", $text);
	$text = preg_replace("/"/", ""\"", $text);
	$tags = "/&lt;(\/|)(\w*)(\ |)(\w*)([\\\=]*)(?|(\")\""\"|)(?|(.*)?"(\")|)([\ ]?)(\/|)&gt;/i";
	$replacement = "&lt;$1$2$3$4$5$6$7$8$9$10&gt;";
	$text = preg_replace($tags, $replacement, $text);
	$text = preg_replace("/=\"\"/", "=", $text);
	return $text;
}

//Очишаем входные данные
function clean_chars($string)
{
	// Remove all remaining other unknown characters
	$string = preg_replace('/[^a-zA-Z0-9\-]/', ' ', $string);
	$string = preg_replace('/^[\-]+/', '', $string);
	$string = preg_replace('/[\-]+$/', '', $string);
	$string = preg_replace('/[\-]{2,}/', ' ', $string);

	return $string;
}

//Транслитерация с Латинского  на Русский
function translitrus($string) {
	$converter = array(
	'а' =&gt; 'a', 'б' =&gt; 'b', 'в' =&gt; 'v', 'г' =&gt; 'g', 'д' =&gt; 'd', 'е' =&gt; 'e', 'ё' =&gt; 'e', 'ж' =&gt; 'zh', 'з' =&gt; 'z', 'и' =&gt; 'i', 'й' =&gt; 'y', 'к' =&gt; 'k', 'л' =&gt; 'l', 'м' =&gt; 'm', 'н' =&gt; 'n', 'о' =&gt; 'o', 'п' =&gt; 'p', 'р' =&gt; 'r', 'с' =&gt; 's', 'т' =&gt; 't', 'у' =&gt; 'u', 'ф' =&gt; 'f', 'х' =&gt; 'h', 'ц' =&gt; 'c', 'ч' =&gt; 'ch', 'ш' =&gt; 'sh', 'щ' =&gt; 'sch', 'ь' =&gt; "'", 'ы' =&gt; 'y', 'ъ' =&gt; "'", 'э' =&gt; 'e', 'ю' =&gt; 'yu', 'я' =&gt; 'ya',
	 'А' =&gt; 'A', 'Б' =&gt; 'B', 'В' =&gt; 'V', 'Г' =&gt; 'G', 'Д' =&gt; 'D', 'Е' =&gt; 'E', 'Ё' =&gt; 'E', 'Ж' =&gt; 'Zh', 'З' =&gt; 'Z', 'И' =&gt; 'I', 'Й' =&gt; 'Y', 'К' =&gt; 'K', 'Л' =&gt; 'L', 'М' =&gt; 'M', 'Н' =&gt; 'N', 'О' =&gt; 'O', 'П' =&gt; 'P', 'Р' =&gt; 'R', 'С' =&gt; 'S', 'Т' =&gt; 'T', 'У' =&gt; 'U', 'Ф' =&gt; 'F', 'Х' =&gt; 'H', 'Ц' =&gt; 'C', 'Ч' =&gt; 'Ch', 'Ш' =&gt; 'Sh', 'Щ' =&gt; 'Sch', 'Ь' =&gt; "'", 'Ы' =&gt; 'Y', 'Ъ' =&gt; "'", 'Э' =&gt; 'E', 'Ю' =&gt; 'Yu', 'Я' =&gt; 'Ya'
	);
	return strtr($string, $converter);
}

//Транслитерация с Латинского  на Русский
function translitToRus($string){
  $table = array(
 'А' =&gt; 'A', 'Б' =&gt; 'B', 'В' =&gt; 'V', 'Г' =&gt; 'G', 'Д' =&gt; 'D', 'Е' =&gt; 'E', 'Ё' =&gt; 'YO', 'Ж' =&gt; 'ZH',
 'З' =&gt; 'Z', 'И' =&gt; 'I', 'Й' =&gt; 'J', 'К' =&gt; 'K', 'Л' =&gt; 'L', 'М' =&gt; 'M', 'Н' =&gt; 'N', 'О' =&gt; 'O', 
 'П' =&gt; 'P', 'Р' =&gt; 'R', 'С' =&gt; 'S', 'Т' =&gt; 'T', 'У' =&gt; 'U', 'Ф' =&gt; 'F', 'Х' =&gt; 'H', 'Ц' =&gt; 'C',
 'Ч' =&gt; 'CH', 'Ш' =&gt; 'SH', 'Щ' =&gt; 'CSH', 'Ь' =&gt; '', 'Ы' =&gt; 'Y', 'Ъ' =&gt; '', 'Э' =&gt; 'E', 'Ю' =&gt; 'YU',
 'Я' =&gt; 'YA', 'а' =&gt; 'a', 'б' =&gt; 'b', 'в' =&gt; 'v', 'г' =&gt; 'g', 'д' =&gt; 'd', 'е' =&gt; 'e', 'ё' =&gt; 'yo',
 'ж' =&gt; 'zh', 'з' =&gt; 'z', 'и' =&gt; 'i', 'й' =&gt; 'j', 'к' =&gt; 'k', 'л' =&gt; 'l', 'м' =&gt; 'm', 'н' =&gt; 'n', 
 'о' =&gt; 'o', 'п' =&gt; 'p', 'р' =&gt; 'r', 'с' =&gt; 's', 'т' =&gt; 't', 'у' =&gt; 'u', 'ф' =&gt; 'f', 'х' =&gt; 'h',
 'ц' =&gt; 'c', 'ч' =&gt; 'ch', 'ш' =&gt; 'sh', 'щ' =&gt; 'csh', 'ь' =&gt; '', 'ы' =&gt; 'y', 'ъ' =&gt; '', 'э' =&gt; 'e',
 'ю' =&gt; 'yu', 'я' =&gt; 'ya',
    );

    $output = str_replace(array_keys($table), array_values($table), $string);
    return $output;
}

//Делаем HTML безопасным для вставки в базу
function htmlspecialcharsEx($str)
{
	static $search =  array("&amp;",     "&lt;",     "&gt;",     """,     """,     """,     "'",     "'",     "&lt;",    "&gt;",    "\"");
	static $replace = array("&amp;amp;", "&amp;lt;", "&amp;gt;", "&amp;quot;", "&amp;#34", "&amp;#x22", "&amp;#39", "&amp;#x27", "&lt;", "&gt;", """);
	return str_replace($search, $replace, $str);
}

//Переобразуем HTML Обратно
function htmlspecialcharsback($str)
{
	static $search =  array("&lt;", "&gt;", """, "'", "&amp;");
	static $replace = array("&lt;",    "&gt;",    "\"",     "'",      "&amp;");
	return str_replace($search, $replace, $str);
}

//Удаление файлов на PHP
function DeleteDirFilesEx($path)
{
	if(strlen($path) == 0 || $path == '/')
		return false;

	$full_path = $_SERVER["DOCUMENT_ROOT"]."/".$path;
	$full_path = preg_replace("#[\\\\\\/]+#", "/", $full_path);

	$f = true;
	if(is_file($full_path) || is_link($full_path))
	{
		if(@unlink($full_path))
			return true;
		return false;
	}
	elseif(is_dir($full_path))
	{
		if($handle = opendir($full_path))
		{
			while(($file = readdir($handle)) !== false)
			{
				if($file == "." || $file == "..")
					continue;

				if(!DeleteDirFilesEx($path."/".$file))
					$f = false;
			}
			closedir($handle);
		}
		if(!@rmdir($full_path))
			return false;
		return $f;
	}
	return false;
}

//Удаление файлов на PHP
function DeleteDirFiles($frDir, $toDir, $arExept = array())
{
	if(is_dir($frDir))
	{
		$d = dir($frDir);
		while ($entry = $d-&gt;read())
		{
			if ($entry=="." || $entry=="..")
				continue;
			if (in_array($entry, $arExept))
				continue;
			@unlink($toDir."/".$entry);
		}
		$d-&gt;close();
	}
}

//Получение тип файла на PHP
function GetFileType($path)
{
	$extension = GetFileExtension(strtolower($path));
	switch ($extension)
	{
		case "jpg": case "jpeg": case "gif": case "bmp": case "png":
			$type = "IMAGE";
			break;
		case "swf":
			$type = "FLASH";
			break;
		case "html": case "htm": case "asp": case "aspx":
		case "phtml": case "php": case "php3": case "php4": case "php5": case "php6":
		case "shtml": case "sql": case "txt": case "inc": case "js": case "vbs":
		case "tpl": case "css": case "shtm":
			$type = "SOURCE";
			break;
		default:
			$type = "UNKNOWN";
	}
	return $type;
}

function GetDirectoryIndex($path, $strDirIndex=false)
{
	return GetDirIndex($path, $strDirIndex);
}


function GetDirPath($sPath)
{
	if(strlen($sPath))
	{
		$p = strrpos($sPath, "/");
		if($p === false)
			return '/';
		else
			return substr($sPath, 0, $p+1);
	}
	else
	{
		return '/';
	}
}


function NormalizePhone($number, $minLength = 10)
{
	$minLength = intval($minLength);
	if ($minLength &lt;= 0 || strlen($number) &lt; $minLength)
	{
		return false;
	}

	if (strlen($number) &gt;= 10 &amp;&amp; substr($number, 0, 2) == '+8')
	{
		$number = '00'.substr($number, 1);
	}

	$number = preg_replace("/[^0-9\#\*]/i", "", $number);
	if (strlen($number) &gt;= 10)
	{
		if (substr($number, 0, 2) == '80' || substr($number, 0, 2) == '81' || substr($number, 0, 2) == '82')
		{
		}
		else if (substr($number, 0, 2) == '00')
		{
			$number = substr($number, 2);
		}
		else if (substr($number, 0, 3) == '011')
		{
			$number = substr($number, 3);
		}
		else if (substr($number, 0, 1) == '8')
		{
			$number = '7'.substr($number, 1);
		}
		else if (substr($number, 0, 1) == '0')
		{
			$number = substr($number, 1);
		}
	}

	return $number;
}


function InputType($strType, $strName, $strValue, $strCmp, $strPrintValue=false, $strPrint="", $field1="", $strId="")
{
	$bCheck = false;
	if($strValue &lt;&gt; '')
	{
		if(is_array($strCmp))
			$bCheck = in_array($strValue, $strCmp);
		elseif($strCmp &lt;&gt; '')
			$bCheck = in_array($strValue, explode(",", $strCmp));
	}
	$bLabel = false;
	if ($strType == 'radio')
		$bLabel = true;
	return ($bLabel? '<label>': '').'<input type="'.$strType.'" name="'.$strName.'" id="'.($strId <> ''? $strId : $strName).'" value="'.$strValue.'">'.($strPrintValue? $strValue:$strPrint).($bLabel? '</label>': '');
}


function TruncateText($strText, $intLen)
{
	if(strlen($strText) &gt; $intLen)
		return rtrim(substr($strText, 0, $intLen), ".")."...";
	else
		return $strText;
}


function extract_url($s)
{
	$s2 = '';
	while(strpos(",}])&gt;.", substr($s, -1, 1))!==false)
	{
		$s2 = substr($s, -1, 1);
		$s = substr($s, 0, strlen($s)-1);
	}
	$res = chr(1).$s."/".chr(1).$s2;
	return $res;
}


function DeleteDirFilesEx($path)
{
	if(strlen($path) == 0 || $path == '/')
		return false;

	$full_path = $_SERVER["DOCUMENT_ROOT"]."/".$path;
	$full_path = preg_replace("#[\\\\\\/]+#", "/", $full_path);

	$f = true;
	if(is_file($full_path) || is_link($full_path))
	{
		if(@unlink($full_path))
			return true;
		return false;
	}
	elseif(is_dir($full_path))
	{
		if($handle = opendir($full_path))
		{
			while(($file = readdir($handle)) !== false)
			{
				if($file == "." || $file == "..")
					continue;

				if(!DeleteDirFilesEx($path."/".$file))
					$f = false;
			}
			closedir($handle);
		}
		if(!@rmdir($full_path))
			return false;
		return $f;
	}
	return false;
}

function DeleteDirFiles($frDir, $toDir, $arExept = array())
{
	if(is_dir($frDir))
	{
		$d = dir($frDir);
		while ($entry = $d-&gt;read())
		{
			if ($entry=="." || $entry=="..")
				continue;
			if (in_array($entry, $arExept))
				continue;
			@unlink($toDir."/".$entry);
		}
		$d-&gt;close();
	}
}


function GetFileName($path)
{
	$path = TrimUnsafe($path);
	$path = str_replace("\\", "/", $path);
	$path = rtrim($path, "/");

	$p = bxstrrpos($path, "/");
	if($p !== false)
		return substr($path, $p+1);

	return $path;
}



function GetDirectoryIndex($path, $strDirIndex=false)
{
	return GetDirIndex($path, $strDirIndex);
}


function GetDirPath($sPath)
{
	if(strlen($sPath))
	{
		$p = strrpos($sPath, "/");
		if($p === false)
			return '/';
		else
			return substr($sPath, 0, $p+1);
	}
	else
	{
		return '/';
	}
}


//Парсим URL
function ParseURL($url, $arUrlOld = false)
{
		$arUrl = parse_url($url);

		if (is_array($arUrlOld))
		{
			if (!array_key_exists('scheme', $arUrl))
			{
				$arUrl['scheme'] = $arUrlOld['scheme'];
			}

			if (!array_key_exists('host', $arUrl))
			{
				$arUrl['host'] = $arUrlOld['host'];
			}

			if (!array_key_exists('port', $arUrl))
			{
				$arUrl['port'] = $arUrlOld['port'];
			}
		}

		$arUrl['proto'] = '';
		if (array_key_exists('scheme', $arUrl))
		{
			$arUrl['scheme'] = strtolower($arUrl['scheme']);
		}
		else
		{
			$arUrl['scheme'] = 'http';
		}

		if (!array_key_exists('port', $arUrl))
		{
			if ($arUrl['scheme'] == 'https')
			{
				$arUrl['port'] = 443;
			}
			else
			{
				$arUrl['port'] = 80;
			}
		}

		if ($arUrl['scheme'] == 'https')
		{
			$arUrl['proto'] = 'ssl://';
		}

		$arUrl['path_query'] = array_key_exists('path', $arUrl) ? $arUrl['path'] : '/';
		if (array_key_exists('query', $arUrl) &amp;&amp; strlen($arUrl['query']) &gt; 0)
		{
			$arUrl['path_query'] .= '?' . $arUrl['query'];
		}

		return $arUrl;
}

	
function NormalizePhone($number, $minLength = 10)
{
	$minLength = intval($minLength);
	if ($minLength &lt;= 0 || strlen($number) &lt; $minLength)
	{
		return false;
	}

	if (strlen($number) &gt;= 10 &amp;&amp; substr($number, 0, 2) == '+8')
	{
		$number = '00'.substr($number, 1);
	}

	$number = preg_replace("/[^0-9\#\*]/i", "", $number);
	if (strlen($number) &gt;= 10)
	{
		if (substr($number, 0, 2) == '80' || substr($number, 0, 2) == '81' || substr($number, 0, 2) == '82')
		{
		}
		else if (substr($number, 0, 2) == '00')
		{
			$number = substr($number, 2);
		}
		else if (substr($number, 0, 3) == '011')
		{
			$number = substr($number, 3);
		}
		else if (substr($number, 0, 1) == '8')
		{
			$number = '7'.substr($number, 1);
		}
		else if (substr($number, 0, 1) == '0')
		{
			$number = substr($number, 1);
		}
	}

	return $number;
}	

function InputType($strType, $strName, $strValue, $strCmp, $strPrintValue=false, $strPrint="", $field1="", $strId="")
{
	$bCheck = false;
	if($strValue &lt;&gt; '')
	{
		if(is_array($strCmp))
			$bCheck = in_array($strValue, $strCmp);
		elseif($strCmp &lt;&gt; '')
			$bCheck = in_array($strValue, explode(",", $strCmp));
	}
	$bLabel = false;
	if ($strType == 'radio')
		$bLabel = true;
	return ($bLabel? '<label>': '').'<input type="'.$strType.'" name="'.$strName.'" id="'.($strId <> ''? $strId : $strName).'" value="'.$strValue.'">'.($strPrintValue? $strValue:$strPrint).($bLabel? '</label>': '');
}

function TruncateText($strText, $intLen)
{
	if(strlen($strText) &gt; $intLen)
		return rtrim(substr($strText, 0, $intLen), ".")."...";
	else
		return $strText;
}


function extract_url($s)
{
	$s2 = '';
	while(strpos(",}])&gt;.", substr($s, -1, 1))!==false)
	{
		$s2 = substr($s, -1, 1);
		$s = substr($s, 0, strlen($s)-1);
	}
	$res = chr(1).$s."/".chr(1).$s2;
	return $res;
}



// Переобразуем HTML в текст сохраняя переносы и пробелы
function HTMLToTxt($str, $strSiteUrl="", $aDelete=array(), $maxlen=70)
{
	//get rid of whitespace
	$str = preg_replace("/[\\t\\n\\r]/", " ", $str);

	//replace tags with placeholders
	static $search = array(
		"'<script[^>]*?>.*?</script>'si",
		"'<style[^>]*?>.*?</style>'si",
		"']*?&gt;.*?'si",
		"'&amp;(quot|#34);'i",
		"'&amp;(iexcl|#161);'i",
		"'&amp;(cent|#162);'i",
		"'&amp;(pound|#163);'i",
		"'&amp;(copy|#169);'i",
	);

	static $replace = array(
		"",
		"",
		"",
		"\"",
		"\xa1",
		"\xa2",
		"\xa3",
		"\xa9",
	);

	$str = preg_replace($search, $replace, $str);

	$str = preg_replace("#&lt;[/]{0,1}(b|i|u|em|small|strong)&gt;#i", "", $str);
	$str = preg_replace("#&lt;[/]{0,1}(font|div|span)[^&gt;]*&gt;#i", "", $str);

	//ищем списки
	$str = preg_replace("#]*&gt;#i", "\r\n", $str);
	$str = preg_replace("#]*&gt;#i", "\r\n  - ", $str);

	//удалим то что заданно
	foreach($aDelete as $del_reg)
		$str = preg_replace($del_reg, "", $str);

	//ищем картинки
	$str = preg_replace("/(|\\s*&gt;)/is", "[".chr(1).$strSiteUrl."\\3".chr(1)."] ", $str);
	$str = preg_replace("/(|\\s*&gt;)/is", "[".chr(1)."\\3".chr(1)."] ", $str);

	//ищем ссылки
	$str = preg_replace("/()(.*?)&lt;\\/a&gt;/is", "\\6 [".chr(1).$strSiteUrl."\\3".chr(1)."] ", $str);
	$str = preg_replace("/()(.*?)&lt;\\/a&gt;/is", "\\6 [".chr(1)."\\3".chr(1)."] ", $str);

	//ищем <br>
	$str = preg_replace("#]*&gt;#i", "\r\n", $str);

	//ищем <br>
	$str = preg_replace("#]*&gt;#i", "\r\n\r\n", $str);

	//ищем <hr>
	$str = preg_replace("#]*&gt;#i", "\r\n----------------------\r\n", $str);

	//ищем таблицы
	$str = preg_replace("#&lt;[/]{0,1}(thead|tbody)[^&gt;]*&gt;#i", "", $str);
	$str = preg_replace("#&lt;([/]{0,1})th[^&gt;]*&gt;#i", "&lt;\\1td&gt;", $str);

	$str = preg_replace("##i", "\t", $str);
	$str = preg_replace("##i", "\r\n", $str);
	$str = preg_replace("#]*&gt;#i", "\r\n", $str);

	$str = preg_replace("#\r\n[ ]+#", "\r\n", $str);

	//мочим вообще все оставшиеся тэги
	$str = preg_replace("#&lt;[/]{0,1}[^&gt;]+&gt;#i", "", $str);

	$str = preg_replace("#[ ]+ #", " ", $str);
	$str = str_replace("\t", "    ", $str);

	//переносим длинные строки
	if($maxlen &gt; 0)
		$str = preg_replace("#([^\\n\\r]{".intval($maxlen)."}[^ \\r\\n]*[\\] ])([^\\r])#", "\\1\r\n\\2", $str);

	$str = str_replace(chr(1), " ",$str);
	return trim($str);
}


/**
 * Функция фильтрует строку и устанавливает формат вывода телефонного номера
 * @param string $phone Строка с телефоном
 * @return string
 */
 
function setFormatPhone($phone)
{
  $phone = preg_replace("/[^0-9]/", "", $phone);

  if(strlen($phone) == 7)
    $phone = preg_replace("/([0-9]{3})([0-9]{2})([0-9]{2})/", "$1-$2-$3", $phone);
  elseif(strlen($phone) == 10)
    $phone = preg_replace("/([0-9]{3})([0-9]{3})([0-9]{4})/", "($1)$2-$3", $phone);
  elseif(strlen($phone) == 11)
  {
    $phone = preg_replace("/([0-9])([0-9]{3})([0-9]{3})([0-9]{4})/", "$1($2)$3-$4", $phone);
    $first = substr($phone, 0, 1);
    if(in_array($first, array(7, 8)))
      $phone = '+7'. substr($phone, 1);
  }

  return $phone;
}
getNameDay($date = false)

/**
 * Получаем название дня недели
 * @param string|int $date
 * @return string
 */
 
function getNameDay($date = false)
{
  if(!$date)
    $date = mktime();

  $date = is_int($date) ? $date : strtotime($date);
  $names = array(
      'Monday'    =&gt; 'Понедельник',
      'Tuesday'   =&gt; 'Вторник',
      'Wednesday' =&gt; 'Среда',
      'Thursday'  =&gt; 'Четверг',
      'Friday'    =&gt; 'Пятница',
      'Saturday'  =&gt; 'Суббота',
      'Sunday'    =&gt; 'Воскресенье'
  );

  return $names[ date("l", $date) ];
 

getDaysFromWeek($week = false, $format = 'd.m.Y');

//Функция возвращает интервал дат по номеру недели:

/**
 * По номеру недели функция возвращает интервал дат от понедельника до воскресенья.
 * @param int $week Порядковый номер недели в году
 * @param type $format Формат выводимо даты, по умолчанию 'd.m.Y'
 * @return array
 */
 
function getDaysFromWeek($week = false, $format = 'd.m.Y')
{
  if(!$week)
  $week = date("W");

  $result['today'] = date($format);
  $result['begin'] = date($format, strtotime(date("W") - date("W") ." week -". (date("w") == 0 ? 6 : date("w") - 1) ." day"));
  $result['end']   = date($format, strtotime($result['begin']) + 60 * 60 * 24 * 6);

  $result[] = $result['begin'];
  for($i = 1; $i &lt; 7; $i++)
    $result[] = date($format, strtotime($result['begin']) + 60 * 60 * 24 * $i);

  return $result;
}


//Функция для генерации паролей и любых строк заданной длины. Второй параметр может быть массивом классов символов. Если он указан, тогда в результирующую строчку войдет минимум один символ из каждого класса. Функция выдернута из CMS-Bitrix
randString($pass_len=10, $pass_chars=false)

function randString($pass_len=10, $pass_chars=false)
{
  static $allchars = "abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ0123456789";
  $string = "";
  if(is_array($pass_chars))
  {
    while(strlen($string) &lt; $pass_len)
    {
      if(function_exists('shuffle'))
        shuffle($pass_chars);
      foreach($pass_chars as $chars)
      {
        $n = strlen($chars) - 1;
        $string .= $chars[mt_rand(0, $n)];
      }
    }
    if(strlen($string) &gt; count($pass_chars))
      $string = substr($string, 0, $pass_len);
  }
  else
  {
    if($pass_chars !== false)
    {
      $chars = $pass_chars;
      $n = strlen($pass_chars) - 1;
    }
    else
    {
      $chars = $allchars;
      $n = 61; //strlen($allchars)-1;
    }
    for ($i = 0; $i &lt; $pass_len; $i++)
      $string .= $chars[mt_rand(0, $n)];
  }
  return $string;
}

echo randString(7, array(
  "abcdefghijklnmopqrstuvwxyz",
  "ABCDEFGHIJKLNMOPQRSTUVWX­YZ",
  "0123456789",
  "!@#\$%^&amp;*()",
));
 



/**
* Function of processing of variables for a conclusion in a stream
* Функция обработки переменных для вывода в поток
*/
htmlChars($data);
  function htmlChars($data)
  {
    if(is_array($data))
      $data = array_map("htmlChars", $data);
    else
      $data = htmlspecialchars($data);

    return $data;
  }
/**
* Function of processing of variables for a conclusion in a stream
* Функция обработки переменных для вывода в поток
*/
  function htmlChars_decode($data)
  {
    if(is_array($data))
      $data = array_map("htmlChars_decode", $data);
    else
      $data = htmlspecialchars_decode($data);

    return $data;
  }
 

drawTable($data, $tabs = 0, $columns = 10)

/**
*  Table division
*  Деление таблицы
*/
  function drawTable($data, $tabs = 0, $columns = 10)
  {
    $tbl = null;

    if($tabs === false)
    {
      $tr = $td = null;
    }
    else
    {
      $tr = "\n".str_repeat("\t", $tabs);
      $td = $tr."\t";
    }

    for($i = 0, $n = 1, $d = ceil(count($data) / $columns) * $columns; $i &lt; $d; $i++, $n++)
    {
      if($n == 1)
      $tbl .= $tr."\n";

      $tbl .= $td."\n".(isset($data[$i]) ? $data[$i] : ' ')."\n";

      if($n == $columns)
      {
        $n = 0;
        $tbl .= $tr.'';
      }
    }

    if($tabs !== false)
    $tbl .= "\n";

    return $tbl;
    /*
    $gallery  = "";
    $gallery .= drawTable($rows, IRB_IMAGES_ROWS, IRB_IMAGES_COLUMNS);
    $gallery .= "
"; */ }
 



//Чтобы положить в БД строку, её лучше обработать этой штукой:

/**
* Function of processing of literal constants for SQL
* Функция обработки литеральных констант для SQL
*/

function escapeString($data)
  {

    if(is_array($data))
      $data = array_map("escapeString", $data);
    else
      $data = mysql_real_escape_string($data);

    return $data;
 }


function uploadHandle($file_name, $max_file_size = 100, $extensions = array(), $upload_dir = '.', $out_name = false)
  {

    $error = null;
    $info  = null;
    $max_file_size *= 1024;

    if ($_FILES[$file_name]['error'] === UPLOAD_ERR_OK)
    {
      // проверяем расширение файла
      $file_extension = pathinfo($_FILES[$file_name]['name'], PATHINFO_EXTENSION);
      if (in_array($file_extension, $extensions))
      {
        // проверяем размер файла
        if ($_FILES[$file_name]['size'] &lt; $max_file_size)
        {
	 // новое имя файла
	 if($out_name)
	   $out_name = str_replace('.'.$file_extension, '', $out_name) .'.'. $file_extension;
	 else
	   $out_name = mt_rand(mt_rand(10, 1000), 100000) .'_'. $_FILES[$file_name]['name'];

	 $destination = $upload_dir .'/' . $out_name;

	 if(move_uploaded_file($_FILES[$file_name]['tmp_name'], $destination))
	   $info = LANG_FILE_MESS_OK;
	 else   
	$error = LANG_FILE_MESS_ERR_LOAD;
        }
        else
          $error = LANG_FILE_MESS_MAX_SIZE;
      }
      else
        $error = LANG_FILE_MESS_ERR_EXT;
    }
    else
    {
      // массив ошибок
      $error_values = array(
      UPLOAD_ERR_INI_SIZE   =&gt; LANG_FILE_ERR_INI_SIZE,
      UPLOAD_ERR_FORM_SIZE  =&gt; LANG_FILE_ERR_FORM_SIZE,
      UPLOAD_ERR_PARTIAL    =&gt; LANG_FILE_ERR_PARTIAL,
      UPLOAD_ERR_NO_FILE    =&gt; LANG_FILE_ERR_NO_FILE,
      UPLOAD_ERR_NO_TMP_DIR =&gt; LANG_FILE_ERR_NO_TMP_DIR,
      UPLOAD_ERR_CANT_WRITE =&gt; LANG_FILE_ERR_CANT_WRITE
     );

      $error_code = $_FILES[$file_name]['error'];

      if (!empty($error_values[$error_code]))
        $error = $error_values[$error_code];
      else
        $error = LANG_FILE_MESS_BUG;
    }

    return array('info' =&gt; $info, 'error' =&gt; $error, 'name' =&gt; $out_name);
}
 

translateIt($text, $direct = 'ru_en');

/**
* Transliteration function
* Функция транслитерации текста
* @param string $text
* @param string $direct
* @return string
*/
  function translateIt($text, $direct = 'ru_en')
  {
    $L['ru'] = array(
'Ё', 'Ж', 'Ц', 'Ч', 'Щ', 'Ш', 'Ы',
'Э', 'Ю', 'Я', 'ё', 'ж', 'ц', 'ч',
'ш', 'щ', 'ы', 'э', 'ю', 'я', 'А',
'Б', 'В', 'Г', 'Д', 'Е', 'З', 'И',
'Й', 'К', 'Л', 'М', 'Н', 'О', 'П',
'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ъ',
'Ь', 'а', 'б', 'в', 'г', 'д', 'е',
'з', 'и', 'й', 'к', 'л', 'м', 'н',
'о', 'п', 'р', 'с', 'т', 'у', 'ф',
'х', 'ъ', 'ь'
         );

    $L['en'] = array(
"YO", "ZH",  "CZ", "CH", "SHH","SH", "Y'",
"E'", "YU",  "YA", "yo", "zh", "cz", "ch",
"sh", "shh", "y'", "e'", "yu", "ya", "A",
"B" , "V" ,  "G",  "D",  "E",  "Z",  "I",
"J",  "K",   "L",  "M",  "N",  "O",  "P",
"R",  "S",   "T",  "U",  "F",  "X",  "''",
"'",  "a",   "b",  "v",  "g",  "d",  "e",
"z",  "i",   "j",  "k",  "l",  "m",  "n",
"o",  "p",   "r",  "s",  "t",  "u",  "f",
"x",  "''",  "'"
         );

    // Конвертируем хилый и немощный в великий могучий...
    if($direct == 'en_ru')
    {
      $translated = str_replace($L['en'], $L['ru'], $text);
      // Теперь осталось проверить регистр мягкого и твердого знаков.
      $translated = preg_replace('/(?&lt;=[а-яё])Ь/u', 'ь', $translated);
      $translated = preg_replace('/(?&lt;=[а-яё])Ъ/u', 'ъ', $translated);
    }
    else // И наоборот
      $translated = str_replace($L['ru'], $L['en'], $text);

    // Заменяем пробел на нижнее подчеркивание
    $translated = str_replace(' ', '_', $translated);

    // Возвращаем получателю.
    return $translated;
  }



/*
 * xmlToArray() will convert the given XML text to an array in the XML structure.
 * Link: http://www.bin-co.com/php/scripts/xmlToArray/
 * Arguments : $contents - The XML text
 *     $get_attributes - 1 or 0. If this is 1 the function will get the attributes as well as the tag values - this results in a different array structure in the return value.
 *     $priority - Can be 'tag' or 'attribute'. This will change the way the resulting array sturcture. For 'tag', the tags are given more importance.
 * Return: The parsed XML in an array form. Use print_r() to see the resulting array structure.
 * Examples: $array =  xmlToArray(file_get_contents('feed.xml'));
 *   $array =  xmlToArray(file_get_contents('feed.xml', 1, 'attribute'));
 * xmlToArray($contents, $get_attributes, $priority) 
 */
 
function xmlToArray($contents, $get_attributes = 1, $priority = 'tag')
{
    if(!$contents) return array();

    if(!function_exists('xml_parser_create')) {
        //print "'xml_parser_create()' function not found!";
        return array();
    }

    //Get the XML parser of PHP - PHP must have this module for the parser to work
    $parser = xml_parser_create('');
    xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
    xml_parse_into_struct($parser, trim($contents), $xml_values);
    xml_parser_free($parser);

    if(!$xml_values) return;//Hmm...

    //Initializations
    $xml_array = array();
    $parents = array();
    $opened_tags = array();
    $arr = array();

    $current = &amp;$xml_array; //Refference

    //Go through the tags.
    $repeated_tag_index = array();//Multiple tags with same name will be turned into an array
    foreach($xml_values as $data) {
        unset($attributes,$value);//Remove existing values, or there will be trouble

        //This command will extract these variables into the foreach scope
        // tag(string), type(string), level(int), attributes(array).
        extract($data);//We could use the array by itself, but this cooler.

        $result = array();
        $attributes_data = array();

        if(isset($value)) {
 if($priority == 'tag') $result = $value;
 else $result['value'] = $value; //Put the value in a assoc array if we are in the 'Attribute' mode
        }

        //Set the attributes too.
        if(isset($attributes) and $get_attributes) {
 foreach($attributes as $attr =&gt; $val) {
     if($priority == 'tag') $attributes_data[$attr] = $val;
     else $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
 }
        }

        //See tag status and do the needed.
        if($type == "open") {//The starting of the tag ''
 $parent[$level-1] = &amp;$current;
 if(!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag
     $current[$tag] = $result;
     if($attributes_data) $current[$tag. '_attr'] = $attributes_data;
     $repeated_tag_index[$tag.'_'.$level] = 1;

     $current = &amp;$current[$tag];

 } else { //There was another element with the same tag name

     if(isset($current[$tag][0])) {//If there is a 0th element it is already an array
         $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
         $repeated_tag_index[$tag.'_'.$level]++;
     } else {//This section will make the value an array if multiple tags with the same name appear together
         $current[$tag] = array($current[$tag],$result);//This will combine the existing item and the new item together to make an array
         $repeated_tag_index[$tag.'_'.$level] = 2;

         if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well
  $current[$tag]['0_attr'] = $current[$tag.'_attr'];
  unset($current[$tag.'_attr']);
         }

     }
     $last_item_index = $repeated_tag_index[$tag.'_'.$level]-1;
     $current = &amp;$current[$tag][$last_item_index];
 }

        } elseif($type == "complete") { //Tags that ends in 1 line ''
 //See if the key is already taken.
 if(!isset($current[$tag])) { //New Key
     $current[$tag] = $result;
     $repeated_tag_index[$tag.'_'.$level] = 1;
     if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;

 } else { //If taken, put all things inside a list(array)
     if(isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array...

         // ...push the new element into that array.
         $current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;

         if($priority == 'tag' and $get_attributes and $attributes_data) {
  $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
         }
         $repeated_tag_index[$tag.'_'.$level]++;

     } else { //If it is not an array...
         $current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value
         $repeated_tag_index[$tag.'_'.$level] = 1;
         if($priority == 'tag' and $get_attributes) {
  if(isset($current[$tag.'_attr'])) { //The attribute of the last(0th) tag must be moved as well

      $current[$tag]['0_attr'] = $current[$tag.'_attr'];
      unset($current[$tag.'_attr']);
  }

  if($attributes_data) {
      $current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
  }
         }
         $repeated_tag_index[$tag.'_'.$level]++; //0 and 1 index is already taken
     }
 }

        } elseif($type == 'close') { //End of tag ''
 $current = &amp;$parent[$level-1];
        }
    }

    return($xml_array);
}
 

wrapperText($text, $length, $bgn, $end, $encoding)

/**
 * Оборачиваем текст в указанные теги по определённой длине.
 * @param string $text Текст, строки которого нужно обернуть в теги.
 * @param integer $length По умолчанию 100
 * @param string $bgn По умолчанию '
' * @param string $end По умолчанию '

' * @param string $encoding По умолчанию 'UTF-8' * @return string */ function wrapperText($text = '', $length = 100, $bgn = '

', $end = '

', $encoding = 'UTF-8') { if(empty($text) || empty($length)) return ''; $line = ''; $rows = array(); $array = explode(' ', $text); for($i = 0; $i &lt; count($array); $i++) { if(mb_strlen($line .' '. $array[$i], $encoding) &lt; $length) $line .= ' '. $array[$i]; else { $rows[] = trim($line); $line = $array[$i]; } if($i == (count($array) - 1) &amp;&amp; !empty($line)) $rows[] = trim($line); } return $bgn . implode($end . $bgn, $rows) . $end; }
 

cropText($string, $maxlen, $link, $encoding)

/**
 * Функция обрезает текст по окончании слова.
 * Если задан параметр $link, то в конце текста вставляется ссылка с адресом $link.
 * @param string $string Строка которую нужно обрезать.
 * @param integer $maxlen Количество символов до обрезания.
 * @param string $link URL address.
 * @param string $encoding Кодировка текста, по умолчанию "UTF-8".
 * @return string
 */
  function cropText($string = '', $maxlen = 100, $link = false, $encoding = "UTF-8")
  {
    $len = (mb_strlen($string, $encoding) &gt; $maxlen)
          ? mb_strripos(mb_substr($string, 0, $maxlen, $encoding), ' ', 0, $encoding)
          : $maxlen;

    $cutStr = rtrim(mb_substr($string, 0, $len, $encoding), "., |()/");

    $result = (mb_strlen($string, $encoding) &gt; $maxlen) ? $cutStr .'...' : $cutStr;

    if(!$link)
      return trim($result);
    else
    {
      // Цифра 1130 несёт в себе временный костыль, на её месте должно быть
      // число 30. Проблема связана с кодировкой сервера.
      if(strlen($result) &lt; 20)
        return ''. $result .'';

      //$pos = mb_strripos($result, ' ', round(mb_strlen($result, $encoding) / 3), $encoding);
      $pos = mb_strrpos($result, ' ', -round(mb_strlen($result, $encoding) / 3), $encoding);
      $string_bgn = mb_substr($result, 0, $pos, $encoding);
      $string_end = mb_substr($result, $pos, 1000, $encoding);

      return trim($string_bgn .' '. $string_end .'');
    }
  }
clearText($text)

/**
   * Текст на выходе должен содержать HTML-документ.
   * Необходимо удалить все HTML-теги, секции javascript, пробельные символы.
   * Также необходимо заменить некоторые HTML-сущности на их эквивалент.
   * @param string $text Входящий текст
   * @return string
   */
  function clearText($text)
  {
    $search = array ("']*?&gt;.*?'si",  // Вырезает javaScript
          "'&lt;[\/\!]*?[^&lt;&gt;]*?&gt;'si",// Вырезает HTML-теги
          "'([\r\n])[\s]+'",      // Вырезает пробельные символы
          "'&amp;(quot|#34);'i",      // Заменяет HTML-сущности
          "'&amp;(amp|#38);'i",
          "'&amp;(lt|#60);'i",
          "'&amp;(gt|#62);'i",
          "'&amp;(nbsp|#160);'i",
          "'&amp;(iexcl|#161);'i",
          "'&amp;(cent|#162);'i",
          "'&amp;(pound|#163);'i",
          "'&amp;(copy|#169);'i",
          "'&amp;#(\d+);'e");         // интерпретировать как php-код

    $replace = array ("",
	"",
	"\\1",
	"\"",
	"&amp;",
	"&lt;",
	"&gt;",
	" ",
	chr(161),
	chr(162),
	chr(163),
	chr(169),
	"chr(\\1)");

    return preg_replace($search, $replace, $text);
  }
  


function clean_phone_number($phone) {
       if (!empty($phone)) {
    //var_dump($phone);
    preg_match_all('/[0-9\(\)+.\- ]/s', $phone, $cleaned);
    foreach($cleaned[0] as $k=&gt;$v) {
 $ready .= $v;
    }
    var_dump($ready);
    die;
    if (mb_strlen($cleaned) &gt; 4 &amp;&amp; mb_strlen($cleaned) &lt;=25) {
 return $cleaned;
    }
    else {
 return false;
    }
       }
       return false;
}





//$extension = substr($file_name, strrpos($file_name, "."));
//$extension = end(explode(".", $file_name));


function formspecialchars($var)
{
        $pattern = '/&amp;(#)?[a-zA-Z0-9]{0,};/';
        if (is_array($var)) {    // If variable is an array
		 $out = array();      // Set output as an array
		 foreach ($var as $key =&gt; $v) {
			 $out[$key] = formspecialchars($v);         // Run formspecialchars on every element of the array and return the result. Also maintains the keys.
		 }
				} else {
		 $out = $var;
		 while (preg_match($pattern,$out) &gt; 0) {
			 $out = htmlspecialchars_decode($out,ENT_QUOTES);
		 }
		 $out = htmlspecialchars(stripslashes(trim($out)), ENT_QUOTES,'UTF-8',true);     // Trim the variable, strip all slashes, and encode it
        }

        return $out;
}




function paginator($count, $limit, $page, $url = null, $name = 'page', $block = 33) {
	if (!$url) {
		$url = $_SERVER['REQUEST_URI'];
		if (mb_strstr($url, '?'.$name.'=')) $url = preg_replace('/\?'.$name.'=[0-9]*/', '', $url);
	}
	if (!$limit) $limit = 10;
	if ($count &lt;= $limit) return;
	$page_list = null;  
	if (strstr($url, '?')) $qw = '&amp;';
    else $qw = '?';   
    if ($page &gt; $block) {
		$i = floor($page/ $block); 
		$i = $i * $block;
		if ($i == $page) $i--;
		$a_url = $url.$qw.$name.'='.$i;
		$page_list .= '<br>&lt;&lt;<br>';
    } else $i = 0;
    for ($j = 0; $i &lt; ceil($count / $limit), $j &lt; $block; $i++, $j++) {
		if ($i * $limit &gt;= $count) break;
		if ($i == $page-1) {
			$a_url = $url.$qw.$name.'='.$page;
			if ($page != $i + 1) $page_list .= '<br>'.($i + 1).'<br>';
			else $page_list .= '<br>'.($i + 1).'<br>';
		} else {
			$a_url = $url.$qw.$name.'='.($i + 1);
			if ($page != $i + 1) $page_list .= '<br>'.($i + 1).'<br>';
			else $page_list .= '<br>'.($i + 1).'<br>';
		}  
    }
    if ($i &lt; ceil($count / $limit)) {
		$a_url = $url.$qw.$name.'='.($i + 1);
		$page_list .= '<br>&gt;&gt;<br>';
    }  
	return '<br>'.$page_list.'<br>';
}


function pagination($numRows, $rowsPerPage=1){
	$pageParamNm = "page";
	$pages = ceil( $numRows/$rowsPerPage );
	if ( $pages &lt; 2 ) return "";
	$res = "Страница ";
	if ( array_key_exists("page", $_GET)){
		$currentPage = is_numeric($_GET[$pageParamNm]) ? $_GET[$pageParamNm] : 1;
		unset( $_GET[$pageParamNm] );
	} else {
		$currentPage = 1;
	}
	$params = '';
	foreach ( $_GET as $k=&gt;$v){
		$params .= $k . '=' . urlencode($v) . '&amp;';
	}
	$path = explode( "?", $_SERVER['REQUEST_URI'] );
	for ( $i = 1; $i &lt;= $pages; $i++ ){
		$res .= sprintf( 
			"%s",
			$i == $currentPage ? $i : "{$i}"
		);
	}
	return $res;
}


function paginator_extra($count, $limit, $page, $block = 12) {
	if ($count &lt;= $limit) return;
	if ($page &gt; $block) {
		$i = floor($page / $block) * $block;
		if ($i == $page) $i -= $block;
		$pages_list .= '<br>&lt;<br>';
	} else $i = 0;
	for ($j = 0; $i &lt; ceil($count / $limit), $j &lt; $block; $i++, $j++) {
		if ($i * $limit &gt;= $count) break;
		$pages_list .= ''.($i + 1).'';
	}
    if ($i &lt; ceil($count / $limit)) $pages_list .= '<br>&gt;<br>';
	return $pages_list;
}