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 (sıkıştırma) ve
zlib.inflate (açma) süzgeçleri » RFC 1951'de tanımlanan sıkıştırma
yöntemlerini gerçekler. deflate (sıkıştırma) süzgeci,
aktarılan üç değiştirgeyi bir ilişkisel dizi olarak kabul eder.
level
değiştirgesi 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
değiştirgesinin 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
değiştirgesinin 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 değiştirge olduğundan bir dizi elemanı olarak belirtilebildiği gibi tek başına basit bir değiştirge olarak da belirtilebilmektedir.
zlib.* sıkıştırma süzgeçleri, zlib desteği etkin olduğu takdirde PHP'nin 5.1.0 sürümünden beri kullanılabilmektedir. Ayrıca, » zlib_filter (» PECL paketinden) kurulu olduğu takdirde 5.0.x sürümlerine de geriye dönük uyarlanabilmektedir.
Ö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";
/* veriyi bir yere aktarmadan sıkıştırmayı açmak için
readfile ve zlib.inflate kullanalım */
readfile('php://filter/zlib.inflate/resource=test.deflated');
/* Üretilen çıktı:
Özgün metin 75 karakter uzunluktadır.
Sıkıştırılmış dosya 57 bayt uzunluktadır.
Özgün metin:
Bu bir denemedir.
Bu sadece bir denemedir.
Bu önemli bir dizge değildir.
*/
?>
Ö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');
/* Buradaki "6" sıkıştırma seviyesinin 6 olduğunu göstermektedir */
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";
/* Üretilen çıktı:
Özgün metin 69 karakter uzunluktadır.
Sıkıştırılmış dosya 45 bayt uzunluktadır.
*/
?>
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 değiştirge kabul eder:
blocks
değiştirgesi, çalışma alanı için ayrılacak
belleğin 100 kbaytlık katları olarak 1'den 9'a kadar bir tamsayıdır.
work
değiştirgesi 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 değiştirge 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 değiştirge kabul eder.
Ya sıradan bir mantıksal değer ya da small
anahtarlı tek elemanı olan bir ilişkisel dizidir.
small
değiştirgesine 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 PHP'nin 5.1.0 sürümünden beri kullanılabilmektedir. » bz2_filter (» PECL paketindeki) kurulu olduğu takdirde 5.0.x sürümlerinde geriye dönük olarak 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";
/* Üretilen çıktı:
Özgün dosya 3288 bayt uzunluktadır.
Sıkıştırılmış dosya 1488 bayt uzunluktadır.
*/
?>