ave-cms/functions/func.helpers.php
2018-09-20 11:04:28 +03:00

872 lines
24 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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)));
}
}
?>