我正在尝试用 PHP 压缩一些字符串,但我有一些奇怪的结果。
我试过这个代码,它是在这里找到的
$string = str_repeat('1234567890'.implode('',range('a','z')),48800);
echo strlen($string);//1756800 bytes
$start = microtime(true);
$compressed = gzdeflate($string, 9);
$compressed = gzdeflate($compressed, 9);
$end = microtime(true);
var_dump($compressed);
echo '<br/>'.strlen($compressed).'<br/>';//99 bytes
$star2 = microtime(true);
echo gzinflate(gzinflate($compressed));
$end2 = microtime(true);
echo '</br>- '.($end-$start);
echo '</br>- '.($end2-$star2);
这会返回很好的结果,比如 1756800 字节变成 99 字节。这已经足够好了。
但是当我用真实的字符串为现实世界带来这个解决方案时,我试图压缩一个 3606 字节的字符串,它变成了只有 1765 字节,还不够好。
为什么这个?某些字符可以改变结果?
我已经尝试使用此代码来获得尺寸减小 50% 的结果:
$text = file_get_contents ('doc/test.txt');
$xml = preg_split('/>/',$text , null, PREG_SPLIT_DELIM_CAPTURE);
unset($xml[0]);
unset($xml[1]);
foreach($xml as $p){
$compact = gzdeflate($p,9);
$compact = gzdeflate($compact,9);
var_dump(strlen($compact));
var_dump(strlen($p));
}
我有一些这样的结果:
int(1760) < compressed
int(3606) < normal
int(2441) < compressed
int(5878) < normal