AVE.CMS v3.28
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

872 lines
24 KiB

<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
/**
* Функция очищает строку от пробелов
*
* @param string
* @return string
*/
if (! function_exists('str_nospace'))
{
function str_nospace($string)
{
return trim(str_replace(array(' ',"\r","\n","\t"),'', $string));
}
}
/**
* Функция убирает двойные пробелы
*
* @param string $string данные
* @return string
*/
if (! function_exists('full_trim'))
{
function full_trim($string)
{
return trim(preg_replace('/\s{2,}/', ' ', $string));
}
}
/**
* Функция перевода из 1251 в UTF8
*
* @param string $string данные
* @return string
*/
if (! function_exists('utf8'))
{
function utf8($string){
$string = iconv('windows-1251', 'utf-8', $string);
return $string;
}
}
/**
* Коллекционируем уникальные значения по типу
*
* @param string $type
* @param null $val
* @return array
*/
if (! function_exists('collect_data'))
{
function collect_data($type = '', $val = null)
{
static $arr = array();
if (empty($type))
return false;
if ($val && !trim($type) == '')
{
if (! is_array($val))
$val = array($val);
foreach($val as $value)
{
if (! isset($arr[$type]))
$arr[$type] = array();
if (! in_array($value, $arr[$type]))
$arr[$type][] = $value;
}
}
return isset($arr[$type])
? $arr[$type]
: false;
}
}
/**
* strip_tags_smart(
$s,
array $allowable_tags = null,
$is_format_spaces = true,
array $pair_tags = array('script', 'style', 'map', 'iframe', 'frameset', 'object', 'applet', 'comment', 'button', 'textarea', 'select'),
array $para_tags = array('p', 'td', 'th', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'div', 'form', 'title', 'pre')
)
* Более продвинутый аналог strip_tags() для корректного вырезания тагов из html кода.
* Возможности:
* - корректно обрабатываются вхождения типа "a < b > c"
* - корректно обрабатывается "грязный" html, когда в значениях атрибутов тагов могут встречаться символы < >
* - корректно обрабатывается разбитый html
* - вырезаются комментарии, скрипты, стили, PHP, Perl, ASP код, MS Word таги, CDATA
* - автоматически форматируется текст, если он содержит html код
* - защита от подделок типа: "<<fake>script>alert('hi')</</fake>script>"
*
* @param string $s
* @param array $allowable_tags Массив тагов, которые не будут вырезаны
* Пример: 'b' -- таг останется с атрибутами, '<b>' -- таг останется без атрибутов
* @param bool $is_format_spaces Форматировать пробелы и переносы строк?
* Вид текста на выходе (plain) максимально приближеется виду текста в браузере на входе.
* Другими словами, грамотно преобразует text/html в text/plain.
* Текст форматируется только в том случае, если были вырезаны какие-либо таги.
* @param array $pair_tags массив имён парных тагов, которые будут удалены вместе с содержимым
* см. значения по умолчанию
* @param array $para_tags массив имён парных тагов, которые будут восприниматься как параграфы (если $is_format_spaces = true)
* см. значения по умолчанию
* @return string
*/
include (BASE_DIR . '/lib/StripTagsSmart/strip_tags_smart.php');
/**
* Вычисление разницы между двумя метками времени
*
* @param string $a начальная метка
* @param string $b конечная метка
* @return int время между метками
*/
if (! function_exists('microtime_diff'))
{
function microtime_diff($a, $b)
{
list($a_dec, $a_sec) = explode(' ', $a);
list($b_dec, $b_sec) = explode(' ', $b);
return $b_sec - $a_sec + $b_dec - $a_dec;
}
}
/**
* Функция меняет кодировку файла
*
* @param string $path
* @param string $to
*/
if (! function_exists('file_encoding'))
{
function file_encoding($path, $to='utf')
{
$f = file_get_contents($path);
$f = mb_convert_encoding($f,$to == 'utf' ? 'UTF-8' : 'CP1251', $to == 'utf' ? 'CP1251' : 'UTF-8');
file_put_contents($path, $f);
}
}
/**
* Replace array_combine()
*
* @category PHP
* @package PHP_Compat
* @license LGPL - http://www.gnu.org/licenses/lgpl.html
* @copyright 2004-2007 Aidan Lister <aidan@php.net>, Arpad Ray <arpad@php.net>
* @link http://php.net/function.array_combine
* @author Aidan Lister <aidan@php.net>
* @version $Revision: 1.23 $
* @since PHP 5
* @require PHP 4.0.0 (user_error)
*
* @param $keys
* @param $values
*
* @return array|bool
*/
function php_compat_array_combine($keys, $values)
{
if (! is_array($keys))
{
user_error('array_combine() expects parameter 1 to be array, ' . gettype($keys) . ' given', E_USER_WARNING);
return false;
}
if (! is_array($values))
{
user_error('array_combine() expects parameter 2 to be array, ' . gettype($values) . ' given', E_USER_WARNING);
return false;
}
$key_count = count($keys);
$value_count = count($values);
if ($key_count !== $value_count)
{
user_error('array_combine() Both parameters should have equal number of elements', E_USER_WARNING);
return false;
}
if ($key_count === 0 || $value_count === 0)
{
user_error('array_combine() Both parameters should have number of elements at least 0', E_USER_WARNING);
return false;
}
$keys = array_values($keys);
$values = array_values($values);
$combined = array();
for ($i = 0; $i < $key_count; $i++)
{
$combined[$keys[$i]] = $values[$i];
}
return $combined;
}
// Define
if (! function_exists('array_combine'))
{
function array_combine($keys, $values)
{
return php_compat_array_combine($keys, $values);
}
}
/**
* post()
*
* @param mixed $var
* @return string
*/
if (! function_exists('post'))
{
function post($var)
{
return (isset($_POST[$var]))
? $_POST[$var]
: '';
}
}
/**
* get()
*
* @param mixed $var
* @return string
*/
if (! function_exists('get'))
{
function get($var)
{
return (isset($_GET[$var]))
? $_GET[$var]
: '';
}
}
/**
* sanitize()
*
* @param mixed $string
* @param bool $trim
* @param bool $int
* @param bool $str
* @return mixed|string
*/
if (! function_exists('sanitize'))
{
function sanitize($string, $trim = false, $int = false, $str = false)
{
$string = filter_var($string, FILTER_SANITIZE_STRING);
$string = trim($string);
$string = stripslashes($string);
$string = strip_tags($string);
$string = str_replace(
array(
'‘',
'’',
'“',
'”'
),
array(
"'",
"'",
'"',
'"'
),
$string
);
if ($trim)
$string = substr($string, 0, $trim);
if ($int)
$string = preg_replace("/[^0-9\s]/", "", $string);
if ($str)
$string = preg_replace("/[^a-zA-Z\s]/", "", $string);
return $string;
}
}
/**
* cleanSanitize()
*
* @param mixed $string
* @param bool $trim
* @param string $end_char
* @return mixed|string
*/
if (! function_exists('cleanSanitize'))
{
function cleanSanitize($string, $trim = false, $end_char = '&#8230;')
{
$string = cleanOut($string);
$string = filter_var($string, FILTER_SANITIZE_STRING);
$string = trim($string);
$string = stripslashes($string);
$string = strip_tags($string);
$string = str_replace(array(
'‘',
'’',
'“',
'”'), array(
"'",
"'",
'"',
'"'), $string);
if ($trim) {
if (strlen($string) < $trim)
{
return $string;
}
$string = preg_replace("/\s+/", ' ', str_replace(array(
"\r\n",
"\r",
"\n"), ' ', $string));
if (strlen($string) <= $trim)
{
return $string;
}
$out = "";
foreach (explode(' ', trim($string)) as $val)
{
$out .= $val . ' ';
if (strlen($out) >= $trim)
{
$out = trim($out);
return (strlen($out) == strlen($string)) ? $out : $out . $end_char;
}
}
}
return $string;
}
}
/**
* Функция обрезает текст до заданной величины
*
* @param mixed $string
* @param int $length Длинна
* @param string $etc Окончание
* @param bool $break_words Дробить слова на символы
* @param bool $middle Вырезает середину, оставляет начало + разделитель + конец
* @return mixed|string
*/
if (! function_exists('trancate'))
{
function truncate($string, $length = 80, $etc = '...', $break_words = false, $middle = false)
{
if ($length == 0)
return '';
if (mb_strlen($string) > $length)
{
$length -= min($length, mb_strlen($etc));
if (! $break_words && ! $middle)
{
$string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length + 1));
}
if (! $middle)
{
return mb_substr($string, 0, $length) . $etc;
}
else
{
return mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, - $length / 2);
}
}
else
{
return $string;
}
}
}
/**
* Функция обрезает текст до заданной величины, не бьет слова
*
* @param mixed $str
* @param int $n Длинна
* @param mixed $end_char Окончание
* @return mixed|string
*/
if (! function_exists('truncate_text'))
{
function truncate_text($str, $n = 100, $end_char = '&#8230;')
{
if (strlen($str) < $n)
{
return $str;
}
$str = preg_replace("/\s+/", ' ', str_replace(array(
"\r\n",
"\r",
"\n"), ' ', $str));
if (strlen($str) <= $n)
{
return $str;
}
$out = "";
foreach (explode(' ', trim($str)) as $val)
{
$out .= $val . ' ';
if (strlen($out) >= $n)
{
$out = trim($out);
return (strlen($out) == strlen($str))
? $out
: $out . $end_char;
}
}
return $str;
}
}
/**
* Swap named HTML entities with numeric entities.
*
* @see http://www.lazycat.org/software/html_entity_decode_full.phps
*
* @param $matches
* @param bool $destroy
*
* @return mixed|string
*/
function convert_entity($matches, $destroy = true)
{
$table = array(
'Aacute' => '&#193;', 'aacute' => '&#225;', 'Acirc' => '&#194;', 'acirc' => '&#226;', 'acute' => '&#180;',
'AElig' => '&#198;', 'aelig' => '&#230;', 'Agrave' => '&#192;', 'agrave' => '&#224;', 'alefsym' => '&#8501;',
'Alpha' => '&#913;', 'alpha' => '&#945;', 'amp' => '&#38;', 'and' => '&#8743;', 'ang' => '&#8736;',
'Aring' => '&#197;', 'aring' => '&#229;', 'asymp' => '&#8776;', 'Atilde' => '&#195;', 'atilde' => '&#227;',
'Auml' => '&#196;', 'auml' => '&#228;', 'bdquo' => '&#8222;', 'Beta' => '&#914;', 'beta' => '&#946;',
'brvbar' => '&#166;', 'bull' => '&#8226;', 'cap' => '&#8745;', 'Ccedil' => '&#199;', 'ccedil' => '&#231;',
'cedil' => '&#184;', 'cent' => '&#162;', 'Chi' => '&#935;', 'chi' => '&#967;', 'circ' => '&#710;',
'clubs' => '&#9827;', 'cong' => '&#8773;', 'copy' => '&#169;', 'crarr' => '&#8629;', 'cup' => '&#8746;',
'curren' => '&#164;', 'dagger' => '&#8224;', 'Dagger' => '&#8225;', 'darr' => '&#8595;', 'dArr' => '&#8659;',
'deg' => '&#176;', 'Delta' => '&#916;', 'delta' => '&#948;', 'diams' => '&#9830;', 'divide' => '&#247;',
'Eacute' => '&#201;', 'eacute' => '&#233;', 'Ecirc' => '&#202;', 'ecirc' => '&#234;', 'Egrave' => '&#200;',
'egrave' => '&#232;', 'empty' => '&#8709;', 'emsp' => '&#8195;', 'ensp' => '&#8194;', 'Epsilon' => '&#917;',
'epsilon' => '&#949;', 'equiv' => '&#8801;', 'Eta' => '&#919;', 'eta' => '&#951;', 'ETH' => '&#208;',
'eth' => '&#240;', 'Euml' => '&#203;', 'euml' => '&#235;', 'euro' => '&#8364;', 'exist' => '&#8707;',
'fnof' => '&#402;', 'forall' => '&#8704;', 'frac12' => '&#189;', 'frac14' => '&#188;', 'frac34' => '&#190;',
'frasl' => '&#8260;', 'Gamma' => '&#915;', 'gamma' => '&#947;', 'ge' => '&#8805;', 'gt' => '&#62;',
'harr' => '&#8596;', 'hArr' => '&#8660;', 'hearts' => '&#9829;', 'hellip' => '&#8230;', 'Iacute' => '&#205;',
'iacute' => '&#237;', 'Icirc' => '&#206;', 'icirc' => '&#238;', 'iexcl' => '&#161;', 'Igrave' => '&#204;',
'igrave' => '&#236;', 'image' => '&#8465;', 'infin' => '&#8734;', 'int' => '&#8747;', 'Iota' => '&#921;',
'iota' => '&#953;', 'iquest' => '&#191;', 'isin' => '&#8712;', 'Iuml' => '&#207;', 'iuml' => '&#239;',
'Kappa' => '&#922;', 'kappa' => '&#954;', 'Lambda' => '&#923;', 'lambda' => '&#955;', 'lang' => '&#9001;',
'laquo' => '&#171;', 'larr' => '&#8592;', 'lArr' => '&#8656;', 'lceil' => '&#8968;', 'ldquo' => '&#8220;',
'le' => '&#8804;', 'lfloor' => '&#8970;', 'lowast' => '&#8727;', 'loz' => '&#9674;', 'lrm' => '&#8206;',
'lsaquo' => '&#8249;', 'lsquo' => '&#8216;', 'lt' => '&#60;', 'macr' => '&#175;', 'mdash' => '&#8212;',
'micro' => '&#181;', 'middot' => '&#183;', 'minus' => '&#8722;', 'Mu' => '&#924;', 'mu' => '&#956;',
'nabla' => '&#8711;', 'nbsp' => '&#160;', 'ndash' => '&#8211;', 'ne' => '&#8800;', 'ni' => '&#8715;',
'not' => '&#172;', 'notin' => '&#8713;', 'nsub' => '&#8836;', 'Ntilde' => '&#209;', 'ntilde' => '&#241;',
'Nu' => '&#925;', 'nu' => '&#957;', 'Oacute' => '&#211;', 'oacute' => '&#243;', 'Ocirc' => '&#212;',
'ocirc' => '&#244;', 'OElig' => '&#338;', 'oelig' => '&#339;', 'Ograve' => '&#210;', 'ograve' => '&#242;',
'oline' => '&#8254;', 'Omega' => '&#937;', 'omega' => '&#969;', 'Omicron' => '&#927;', 'omicron' => '&#959;',
'oplus' => '&#8853;', 'or' => '&#8744;', 'ordf' => '&#170;', 'ordm' => '&#186;', 'Oslash' => '&#216;',
'oslash' => '&#248;', 'Otilde' => '&#213;', 'otilde' => '&#245;', 'otimes' => '&#8855;', 'Ouml' => '&#214;',
'ouml' => '&#246;', 'para' => '&#182;', 'part' => '&#8706;', 'permil' => '&#8240;', 'perp' => '&#8869;',
'Phi' => '&#934;', 'phi' => '&#966;', 'Pi' => '&#928;', 'pi' => '&#960;', 'piv' => '&#982;',
'plusmn' => '&#177;', 'pound' => '&#163;', 'prime' => '&#8242;', 'Prime' => '&#8243;', 'prod' => '&#8719;',
'prop' => '&#8733;', 'Psi' => '&#936;', 'psi' => '&#968;', 'quot' => '&#34;', 'radic' => '&#8730;',
'rang' => '&#9002;', 'raquo' => '&#187;', 'rarr' => '&#8594;', 'rArr' => '&#8658;', 'rceil' => '&#8969;',
'rdquo' => '&#8221;', 'real' => '&#8476;', 'reg' => '&#174;', 'rfloor' => '&#8971;', 'Rho' => '&#929;',
'rho' => '&#961;', 'rlm' => '&#8207;', 'rsaquo' => '&#8250;', 'rsquo' => '&#8217;', 'sbquo' => '&#8218;',
'Scaron' => '&#352;', 'scaron' => '&#353;', 'sdot' => '&#8901;', 'sect' => '&#167;', 'shy' => '&#173;',
'Sigma' => '&#931;', 'sigma' => '&#963;', 'sigmaf' => '&#962;', 'sim' => '&#8764;', 'spades' => '&#9824;',
'sub' => '&#8834;', 'sube' => '&#8838;', 'sum' => '&#8721;', 'sup' => '&#8835;', 'sup1' => '&#185;',
'sup2' => '&#178;', 'sup3' => '&#179;', 'supe' => '&#8839;', 'szlig' => '&#223;', 'Tau' => '&#932;',
'tau' => '&#964;', 'there4' => '&#8756;', 'Theta' => '&#920;', 'theta' => '&#952;', 'thetasym' => '&#977;',
'thinsp' => '&#8201;', 'THORN' => '&#222;', 'thorn' => '&#254;', 'tilde' => '&#732;', 'times' => '&#215;',
'trade' => '&#8482;', 'Uacute' => '&#218;', 'uacute' => '&#250;', 'uarr' => '&#8593;', 'uArr' => '&#8657;',
'Ucirc' => '&#219;', 'ucirc' => '&#251;', 'Ugrave' => '&#217;', 'ugrave' => '&#249;', 'uml' => '&#168;',
'upsih' => '&#978;', 'Upsilon' => '&#933;', 'upsilon' => '&#965;', 'Uuml' => '&#220;', 'uuml' => '&#252;',
'weierp' => '&#8472;', 'Xi' => '&#926;', 'xi' => '&#958;', 'Yacute' => '&#221;', 'yacute' => '&#253;',
'yen' => '&#165;', 'Yuml' => '&#376;', 'yuml' => '&#255;', 'Zeta' => '&#918;', 'zeta' => '&#950;',
'zwj' => '&#8205;', 'zwnj' => '&#8204;'
);
if (isset($table[$matches[1]]))
return $table[$matches[1]];
else
return $destroy
? ''
: $matches[0];
}
/**
* stripTags()
*
* @param mixed $start
* @param mixed $end
* @param mixed $string
* @return string
*/
if (! function_exists('stripTags'))
{
function stripTags($start, $end, $string)
{
$string = stristr($string, $start);
$doend = stristr($string, $end);
return substr($string, strlen($start), -strlen($doend));
}
}
/**
* stripExt()
*
* @param mixed $filename
* @return string
*/
if (! function_exists('stripExt'))
{
function stripExt($filename)
{
if (strpos($filename, ".") === false)
return ucwords($filename);
else
return substr(ucwords($filename), 0, strrpos($filename, "."));
}
}
/**
* Очиста текста
*
* @param mixed $text
* @return string
*/
if (! function_exists('cleanOut'))
{
function cleanOut($text)
{
$text = strtr($text, array(
'\r\n' => "",
'\r' => "",
'\n' => ""));
$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
$text = str_replace('<br>', '<br />', $text);
return stripslashes($text);
}
}
/**
* Сравнение двух чисел
*
* @param mixed $float1
* @param mixed $float2
* @param string $operator
* @return bool
*/
if (! function_exists('compareFloatNumbers'))
{
function compareFloatNumbers($float1, $float2, $operator='=')
{
// Check numbers to 5 digits of precision
$epsilon = 0.00001;
$float1 = (float)$float1;
$float2 = (float)$float2;
switch ($operator)
{
// equal
case "=":
case "eq":
if (abs($float1 - $float2) < $epsilon) {
return true;
}
break;
// less than
case "<":
case "lt":
if (abs($float1 - $float2) < $epsilon) {
return false;
} else {
if ($float1 < $float2) {
return true;
}
}
break;
// less than or equal
case "<=":
case "lte":
if (compareFloatNumbers($float1, $float2, '<') || compareFloatNumbers($float1, $float2, '=')) {
return true;
}
break;
// greater than
case ">":
case "gt":
if (abs($float1 - $float2) < $epsilon) {
return false;
} else {
if ($float1 > $float2) {
return true;
}
}
break;
// greater than or equal
case ">=":
case "gte":
if (compareFloatNumbers($float1, $float2, '>') || compareFloatNumbers($float1, $float2, '=')) {
return true;
}
break;
case "<>":
case "!=":
case "ne":
if (abs($float1 - $float2) > $epsilon) {
return true;
}
break;
default:
die("Unknown operator '".$operator."' in compareFloatNumbers()");
}
return false;
}
}
/**
* Поиск значения по массиву
*
* @param $array
* @param $key
* @param bool $value
* @return bool
*/
if (!function_exists('searchforValue'))
{
function searchforValue($array, $key, $value)
{
if($array)
{
foreach ($array as $val)
{
if ($val->$key == $value)
return true;
}
}
return false;
}
}
/**
* Поиск в массиве
*
* @param mixed $array
* @param mixed $val1
* @param mixed $val2
* @return array|int
*/
if (! function_exists('findInArray'))
{
function findInArray($array, $val1, $val2)
{
if ($array)
{
$result = array();
foreach ($array as $val)
{
if ($val->$val1 == $val2)
$result[] = $val;
}
return ($result)
? $result
: 0;
}
return 0;
}
}
/**
* Скачать файл
*
* @param $fileLocation
* @param $fileName
* @param int $maxSpeed
* @return bool
*/
if (! function_exists('downloadFile'))
{
function downloadFile($fileLocation, $fileName, $maxSpeed = 5120)
{
if (connection_status() != 0)
return (false);
$extension = strtolower(substr($fileName, strrpos($fileName, '.') + 1));
/* List of File Types */
$fileTypes['swf'] = 'application/x-shockwave-flash';
$fileTypes['pdf'] = 'application/pdf';
$fileTypes['exe'] = 'application/octet-stream';
$fileTypes['zip'] = 'application/zip';
$fileTypes['doc'] = 'application/msword';
$fileTypes['xls'] = 'application/vnd.ms-excel';
$fileTypes['ppt'] = 'application/vnd.ms-powerpoint';
$fileTypes['gif'] = 'image/gif';
$fileTypes['png'] = 'image/png';
$fileTypes['jpeg'] = 'image/jpg';
$fileTypes['jpg'] = 'image/jpg';
$fileTypes['rar'] = 'application/rar';
$fileTypes['ra'] = 'audio/x-pn-realaudio';
$fileTypes['ram'] = 'audio/x-pn-realaudio';
$fileTypes['ogg'] = 'audio/x-pn-realaudio';
$fileTypes['wav'] = 'video/x-msvideo';
$fileTypes['wmv'] = 'video/x-msvideo';
$fileTypes['avi'] = 'video/x-msvideo';
$fileTypes['asf'] = 'video/x-msvideo';
$fileTypes['divx'] = 'video/x-msvideo';
$fileTypes['mp3'] = 'audio/mpeg';
$fileTypes['mp4'] = 'audio/mpeg';
$fileTypes['mpeg'] = 'video/mpeg';
$fileTypes['mpg'] = 'video/mpeg';
$fileTypes['mpe'] = 'video/mpeg';
$fileTypes['mov'] = 'video/quicktime';
$fileTypes['swf'] = 'video/quicktime';
$fileTypes['3gp'] = 'video/quicktime';
$fileTypes['m4a'] = 'video/quicktime';
$fileTypes['aac'] = 'video/quicktime';
$fileTypes['m3u'] = 'video/quicktime';
$contentType = $fileTypes[$extension];
header("Cache-Control: public");
header("Content-Transfer-Encoding: binary\n");
header('Content-Type: $contentType');
$contentDisposition = 'attachment';
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
{
$fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1);
header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
}
else
{
header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
}
header("Accept-Ranges: bytes");
$range = 0;
$size = filesize($fileLocation);
if (isset($_SERVER['HTTP_RANGE']))
{
list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']);
str_replace($range, "-", $range);
$size2 = $size - 1;
$new_length = $size - $range;
header("HTTP/1.1 206 Partial Content");
header("Content-Length: $new_length");
header("Content-Range: bytes $range$size2/$size");
}
else
{
$size2 = $size - 1;
header("Content-Range: bytes 0-$size2/$size");
header("Content-Length: " . $size);
}
if ($size == 0)
die('Zero byte file! Aborting download');
$fp = fopen("$fileLocation", "rb");
fseek($fp, $range);
while (! feof($fp) and (connection_status() == 0))
{
set_time_limit(0);
print (fread($fp, 1024 * $maxSpeed));
flush();
ob_flush();
sleep(1);
}
fclose($fp);
exit;
//return ((connection_status() == 0) and !connection_aborted());
}
}
/**
* Конвертируем hex color в decimal color
* @param string $hexcolor Значение цвета в HEX. Example: #A9B7D3
* @return array|bool
*/
if (! function_exists('color_h2d'))
{
function color_h2d($hexcolor)
{
if(mb_strlen($hexcolor) != 7 || mb_strpos($hexcolor, "#") === false)
return false;
return array( "r" => hexdec(mb_substr($hexcolor, 1, 2)),
"g" => hexdec(mb_substr($hexcolor, 3, 2)),
"b" => hexdec(mb_substr($hexcolor, 5, 2)));
}
}
?>