2012-06-12 28 views
6

Estoy comprimiendo la matriz con gzcompress (json_encode ($ arr), 9). Así que estoy convirtiendo array en string con json_encode y luego comprime con gzcompress. Pero no pude encontrar la gran diferencia en el tamaño de la cadena resultante. Antes del tamaño de compresión es 488 KB y después del tamaño de compresión es 442 KB.La mejor manera de comprimir una cadena en PHP

¿Hay alguna forma de que pueda comprimir más la cuerda?

Gracias de antemano.

Respuesta

10

La calidad de la compresión de la cuerda dependerá de los datos que desee comprimir. Si consiste principalmente en datos aleatorios, no logrará tantas mejoras en el tamaño. Hay muchos algoritmos por ahí que han sido diseñados para un uso específico.

Debería intentar determinar en qué consisten principalmente sus datos para comprimir y luego seleccionar una compresión adecuada.

Ahora solo puedo referirlo a bzcompress, bzip tiene generalmente mayores tasas de compresión que gzip.

10

No estoy seguro de que sus números sean correctos, aunque podría usar gzdeflate en lugar de gzcompress ya que gzcompress agrega 6 bytes a la salida, 2 bytes adicionales al comienzo y 4 bytes adicionales al final.

Una prueba simple muestra una cadena len 1756800 comprimida a 99bytes comprimiéndola dos veces, 5164bytes si se comprime una vez.

<?php 
$string = str_repeat('1234567890'.implode('', range('a', 'z')), 48800); 

echo strlen($string); //1756800 bytes 

$compressed = gzdeflate($string, 9); 
$compressed = gzdeflate($compressed, 9); 

echo '<br/>'.strlen($compressed).'<br/>';//99 bytes 

echo gzinflate(gzinflate($compressed)); 
?> 
Cuestiones relacionadas