A
Ahmea
Прохожие
- Автор темы
- #1
Переделываем с другом, тут весч одну. Возникла проблема у нас небольшая. Скрипт наш через ajax маслает неслабыми массивами чисел целых туда-сюда. Посидели прикинули...не покатит на модеме. Ну мы давай думать как можно сожмякать все в пхп, а в js распаковать и наоборот.
Нашли такую весч: _http://www.compression.ru/arctest/self/ahp.htm
Но так нам и не удалось найти ее ломаную или в свободном доступе. Потом толи обкурились сигарет, толи еще чего , наваяли пару скриптиков. Впринципе делают они что нужно, экономия по трафу около 40% получилась, нам впринципе этого хватило.
Выложу может комунить сгодится:
Работает только с целыми числами, числа разделяли "#" и "|".
Кусок для php:
Кусок для js:
Нашли такую весч: _http://www.compression.ru/arctest/self/ahp.htm
Но так нам и не удалось найти ее ломаную или в свободном доступе. Потом толи обкурились сигарет, толи еще чего , наваяли пару скриптиков. Впринципе делают они что нужно, экономия по трафу около 40% получилась, нам впринципе этого хватило.
Выложу может комунить сгодится:
Работает только с целыми числами, числа разделяли "#" и "|".
Кусок для php:
PHP:
function alt_pow($x, $power)
{
$res = base_convert($power, 10, 2);
$result = $x;
$t = strlen($res);
for ($i = 1; $i < $t; $i++)
{
$digit = $res[$i];
if ($digit != 0)
$result = $result * $result * $x;
else
$result = $result * $result;
}
return $result;
}
function pack_s($number)
{
$minus = false;
if ($number[0]=="-")
{
$number = substr($number, 1, strlen($number)-1);
$minus = true;
}
$base = '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
$R = (strlen($base));
$result = "";
do{
$ostatok = $number % $R;
$number = floor($number/$R);
$result = $base[$ostatok].$result;
} while ($number!=0);
return ($minus)? "-".$result : $result;
}
function unpack_s($text)
{
$minus = false;
if ($text[0]=="-")
{
$text = substr($text, 1, strlen($text)-1);
$minus = true;
}
$base = '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
$result = 0;
$R = (strlen($base));
do
{
$next = $text[0];
$val = strpos($base, $next);
if ((strlen($text)-1)!=0)
{
$result += $val*alt_pow($R, strlen($text)-1);
}
else
$result += $val;
$text = substr($text, 1, strlen($text)-1);
} while ($text!="");
return ($minus)? -1*$result : $result;
}
PHP:
function pack_s(number)
{
minus = false;
if (number[0]=='-')
{
number = number.substr(1, number.length-1);
minus = true;
}
base = '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
R = base.length;
result = "";
do{
ostatok = number % R;
number = Math.floor(number/R);
result = base[ostatok]+result;
} while (number!=0);
return (minus)? '-'+result : result;
}
function unpack_s(text)
{
minus = false;
if (text[0]=='-')
{
text = text.substr(1, text.length-1);
minus = true;
}
base = '. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$\'"()*\\+,/:;<=>?@&!№%^`~_{}[]АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя';
result = 0;
R = base.length;
do
{
next = text[0];
val = base.indexOf(next);
if ((text.length-1)!=0)
result += val*(Math.pow(R,(text.length-1)));
else
result += val;
text = text.substr(1, text.length-1);
} while (text!="");
return (minus)? result*-1 : result;
}