Sıkıştırma Süzgeçleri

Sıkıştırma Sarmalayıcıları yerel dosya sisteminde gzip ve bz2 uyumlu dosyalar oluşturabilmelerine rağmen ne ağ akımlarına sıkıştırma uygulayabilir ne de sıkıştırılmış ağ akımlarının sıkıştırmasını açabilirler. Bunu sağlamak için, akım kaynaklarına herhangi bir anda bir sıkıştırma süzgeci uygulanabilir.

Bilginize: Sıkıştırma süzgeçleri gzip gibi komut satırı uygulamaları tarafından kullanılan dosya baş uç ve ayak uçlarını üretmezler. Sadece sıkıştırılmış veri akımlarının yararlı yükünü sıkıştırıp açarlar.

zlib.deflate and zlib.inflate

» RFC 1951'de tanımlanan sıkıştırma yöntemlerini gerçekler. deflate (sıkıştırma) süzgeci, aktarılan üç bağımsız değişkeni bir ilişkisel dizi olarak kabul eder. level bağımsız değişkeni sıkıştırmanın derecesini (1-9) belirler. Büyük numaralar, küçüklerine göre genelde daha küçük yararlı yük oluşturmasına rağmen daha uzun işlem zamanına gerektirirler. Ayrıca iki özel sıkıştırma seviyesi daha mevcuttur: 0 (hiç sıkıştırma yapılmaz) ve -1 (zlib yerleşik öntanımlısı; şimdilik 6). window bağımsız değişkeninin değeri, sıkıştırma döngüsü pencere genişliğinin 2 tabanına göre logaritmasıdır. Yüksek değerler (yukarda 15'e -- 32768 bayta kadar) daha büyük bellek tüketimi karşılığında daha çok sıkıştırma sağlarken, düşük değerler (aşağıda 9'a -- 512 bayta kadar) daha az bellek tüketimi karşılığında daha az sıkıştırma sağlar. Öntanımlı window genişliği şimdilik 15'tir. memory bağımsız değişkeninin değeri ne kadar bellek ayrılacağını belirleyen bir katsayıdır. Geçerli değerler 1'den (en az bellek ayırma) 9'a (en çok bellek ayırma) kadardır. Bu bellek ayırma işlemi sadece hızı etkiler, üretilen yararlı yükün boyutuna etkisi yoktur.

Bilginize: Sıkıştırma seviyesi en çok kullanılan bağımsız değişken olduğundan bir dizi elemanı olarak belirtilebildiği gibi tek başına basit bir bağımsız değişken olarak da belirtilebilmektedir.

zlib.* sıkıştırma süzgeçleri, zlib desteği etkin olduğu takdirde kullanılabilmektedir.

Örnek 1 - zlib.deflate ve zlib.inflate örneği

<?php
$params
= array('level' => 6, 'window' => 15, 'memory' => 9);

$özgün_metin = "Bu bir denemedir.\nBu sadece bir denemedir.\nBu önemli bir dizge değildir.\n";
echo
"Özgün metin " . strlen($özgün_metin) . " karakter uzunluktadır.\n";

$fp = fopen('test.deflated', 'w');
stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, $params);
fwrite($fp, $özgün_metin);
fclose($fp);

echo
"Sıkıştırılmış dosya ".filesize('test.deflated')." bayt uzunluktadır.\n";
echo
"Özgün metin:\n";

readfile('php://filter/zlib.inflate/resource=test.deflated');



?>

Örnek 2 - Basit bir zlib.deflate örneği

<?php
$özgün_metin
= "Bu bir denemedir.\nBu sadece bir denemedir.\nBu önemsiz bir dizgedir.\n";
echo
"Özgün metin ".strlen($özgün_metin)." karakter uzunluktadır.\n";

$fp = fopen('test.deflated', 'w');

stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, 6);
fwrite($fp, $özgün_metin);
fclose($fp);

echo
"Sıkıştırılmış dosya ".filesize('test.deflated')." bayt uzunluktadır.\n";


?>

bzip2.compress and bzip2.decompress

bzip2.compress ve bzip2.decompress süzgeçleri yukarıda açıklanan zlib süzgeçleriyle aynı anlamda çalışırlar. bzip2.compress süzgeci bir ilişkisel dizinin elemanları olarak iki bağımsız değişken kabul eder: blocks bağımsız değişkeni, çalışma alanı için ayrılacak belleğin 100 kbaytlık katları olarak 1'den 9'a kadar bir tamsayıdır. work bağımsız değişkeni de bir tamsayı olup, son çare olarak daha yavaş fakat daha güvenilir bir yönteme başvurmadan önce normal bir sıkıştırma yöntemine ne kadar çaba harcanacağını belirten 0'dan 250'ye kadar bir değerdir. Bu bağımsız değişken sadece hız üzerinde etkilidir. Bu ayardan ne sıkıştırılmış çıktının boyu ne de bellek kullanımı etkilenir. 0 değeri bzip kütüphanesinin yerleşik öntanımlısının kullanılacağı anlamına gelir. bzip2.decompress süzgeci tek bir bağımsız değişken kabul eder. Ya sıradan bir mantıksal değer ya da small anahtarlı tek elemanı olan bir ilişkisel dizidir. small bağımsız değişkenine true değerinin atanması, bzip2 kütüphanesinin sıkıştırmayı açmak için hız pahasına en az belleği ayıracağı anlamına gelir.

bzip2.* sıkıştırma süzgeçleri, bz2 desteği etkin olduğu takdirde kullanılabilmektedir.

Örnek 3 - bzip2.compress ve bzip2.decompress örneği

<?php
$param
= array('blocks' => 9, 'work' => 0);

echo
"Özgün dosya " . filesize('LICENSE') . " bayt uzunluktadır.\n";

$fp = fopen('LICENSE.compressed', 'w');
stream_filter_append($fp, 'bzip2.compress', STREAM_FILTER_WRITE, $param);
fwrite($fp, file_get_contents('LICENSE'));
fclose($fp);

echo
"Sıkıştırılmış dosya " . filesize('LICENSE.compressed') . " bayt uzunluktadır.\n";


?>
To Top