PHP ile zip dosyaları oluşturmak ve açmak
Zaman zaman web uygulamarında zip'li dosyalar oluşturmak veya zip'li dosyaları açmak gerekebiliyor. Örneğin tek seferde birden fazla resim dosyasının upload edilmesi gereken durumlarda zip dosyası kullanmak kullanıcıya büyük kolaylık sağlayabilir. Veyahut php ile bir word veya excel dökümanı olarak oluşturduğunuz uzun bir raporu kullanıya zip'lenmiş halde sunmak da yararlı olabilir. Buna benzer durumlarda php ile zip dosyaları oluşturmak veya zip dosyalarını açmak için taklalar atmaya gerek yok. İnternette çok güzel hazırlanmış sınıf (class)'lar var. dUnzip de bunlardan bir tanesi... Bakalım dUnzip ile bu iş ne kadar kolaymış.
dUnzip sınıfı
Brazilyalı bir programcı tarafından yazılmış olan bu sınıfı bu bağlantıdan bilgisayarınıza indirebilirsiniz. Bu sınıfın çalışabilmesini için php'nin ZLib desteği olması gerekiyor. İyi haber şu: ZLib desteğin pek çok sunucuda zaten açık halde
Fakat siz yine de Zlip desteğinin açık olup olmadığını phpinfo() öğrenebilirsiniz. Eğer bu destek açık değilse gerekli bilgiyi php.net/zlip sayfasından alabilirsiniz.
dUnzip sınıfı içerisinde 2 adet ana dosya bulunmaktadır. Bunlar dZip.inc.php ve dUnzip2.inc.php dosyalarıdır. Eğer zip'li dosya oluşturmak istiyorsanuz dZip.inc.php dosyasını, daha önceden oluşturulmuş bir zip'li dosyayı açmak istiyorsanız da dUnzip2.inc.php dosyasını php sayfanıza dahil etmeniz (include) gerekiyor. Şimdi basit bir örnek yapalım.
Zip'li dosya oluşturmak
Örneğin resim_1.png, resim_2.jpg ve resim_3.gif isminde üç adet resim dosyamız olsun. Bu resimlerin hepsini rezimler.zip isminde zip'li bir dosyaya dönüştürmemiz gerektiğinde şöyle bir kod kullanmanız yetecektir.
-
<?php
-
include("dzip.inc.php");
-
$zip = new dZip("resimler.zip");
-
$zip->addFile("resim_1.png", "resim_1.png");
-
$zip->addFile("resim_2.jpg", "resim_2.jpg");
-
$zip->addFile("resim_3.gif", "baska_isimde_resim.gif");
-
$zip->save();
-
?>
Zip'li dosya oluşturduğumuz için 2. satırda dZip.inc.php dosyasını sayfaya dahil ettik. 3. satırda ise dUnzip sınıfını kullanıma hazırlıyoruz. Aynı zamanda sonuçta oluşacak olan Zip'li dosyanın ismini belirtiyoruz.
4, 5 ve 6 nolu satırlarda Zip'li dosyanın içerisine kaydedilecek dosyaları belirtiyoruz. addFile() fonksiyonuna ik tane parametre bildiriyoruz. İlk parametre sıkıştırmak istediğimiz dosyanın gerçek ismi iken, ikinci parametre ise Zip'li dosyanın içerisinde görünecek olan ismi. Ve bundan sonra 7. satırda dosyaların, Zip'li dosya içerisine kayıt edilmesini sağlıyoruz.

Oluşturduğumuz resimler.zip dosyasının içeriği
Zip'li dosyayı açma
Şimdi de biraz önce oluşturduğumuz rezimler.zip dosyasını nasıl açabiliriz, nasıl içerisindekileri çıkartabiliriz ona bakalım.
-
<?php
-
include("dUnzip2.inc.php");
-
$zip = new dUnzip2("resimler.zip");
-
$zip->unzipAll("resimlerim");
-
?>
Zip'li bir dosyayı açacağımız için 2. satırda dUnzip2.inc.php dosyasını sayfaya dahil ettik. 3. satırda ise dUnzip sınıfını kullanıma hazırlıyoruz. Aynı zamanda çıkartmak istediğimiz Zip'li dosyanın ismini belirtiyoruz. 4. satırda ise Zip'li dosyanın içindekilerin hepsini resimlerim isimli bir klasör içerisine çıkartılmasını belirtiyoruz. Tek tek dosya çıkartmak isterseniz $zip->unzip("baska_isimde_resim.gif", "resim_3.gif"); şeklinde bir kod kullanabilirsiniz.
Yorum takibi
Geri izleme
Yazıyı Paylaş
11 Haziran 2007, 11:14
Programlama
Bugün 3 kez, toplam 4,631 kez okundu.
dunzip, php, zip, zlib

11 Haziran 2007, 11:45
bunun birde gzip olanı var birde onu nasıl yapabileceyimiz anlatsan çok güzel olur pek güzel olur
11 Haziran 2007, 12:36
Burada anlattığım dUnzip sınıfı sadece ZIP dosyalarıyla çalışıyor. Uzantısı GZ olan dosyaları oluşturmak daha basit zaten. Bunu php’nin kendi fonksiyonlarıyla kendiniz de yapabilirsiniz. http://tr2.php.net/gzcompress adresinde örnekler var.
11 Haziran 2007, 12:45
burda ing. anlatılmış daha önce de bakmıştım fakat neçare
11 Haziran 2007, 12:51
Bu örnek işine yarar sanırım.
11 Haziran 2007, 13:12
yardım için tşk. burdaki g ziplemek istediğimiz dosya resim değil de html dosyası olmasını istiyorum örneğin
gzYap(”resim.png”, “index.html.gz”);
gibi olabilirmi ?
çünkü gzipli dosyaları Browser lar daha kolay açıyor WordPress de bu özellik var
11 Haziran 2007, 17:02
Arkadaşlar ben tek tek dosyaları değirde bir klasör içinde bulunan tüm dosyaları tek seferde zipletmek istiyorum.Bunu nasıl yapacam
12 Haziran 2007, 12:54
@arda
Html dosyaları da oluşturabilirsin. Alttaki gibi yapman yeterli.
gzYap("index.html", "index.html.gz");@vurkun
Klasör içindeki tüm dosyaları da sıkıştırabilirsin. Yalnız bunun için klasördeki tüm dosyaların bir listesini almalısın ve sonra
$zip->addFile();ile döngü içerisinde sıkıştırma yapmalısın.12 Haziran 2007, 13:05
Erhan abi teşekkürler.
12 Haziran 2007, 13:13
inanın bu listeleme ve zipleme işini bir aydır araştırıyorum ama hiçbir sonuca ulaşamadım.Kafam durmuş durumda.Örnek bir kod varsa benimle paylaşırmısınız
15 Haziran 2007, 21:41
Ben de böyle bişey arıyordum aylar önce
arşive alayım lazım olabilir
15 Haziran 2007, 21:43
@Hasan
userbarlar da güzelmiş hani
17 Haziran 2007, 16:39
Erhan, valla sana ne kadar teşekkür etsem azdır. Böyle bir sınıf arıyordum, gökten inmiş gibi oldun
Saol varol. Bu arada her geçen gün içimden iyi ki adaşıma günlük açtırmışım diyorum 
17 Haziran 2007, 16:49
[…] kim istemez ki İşte tam bu konuda bir makale yazmak istiyordum ki eburhan konuya el atmış ve PHP ile zip dosyaları oluşturmak ve açmak isimli mükemmel bir makale yazmış. Çok da iyi etmiş yoksa ben php fonksiyonlarıyla konuyu […]
17 Haziran 2007, 22:29
@yakuter
Teşekkür etmesi gereken birisi varsa o da benim biliyorsun. Asıl sen sağol varol
4 Temmuz 2007, 23:01
Çok güZel Bir php betiği Bizimle Paylaştığın İçin teşekkürler
Aynı Şekilde Klasor leride şifreleye bilseydi daha iyi olurdu
iyi çalışmalar
22 Ağustos 2007, 10:14
Ben BG den yaziyorum ben de uzun zamandir boyle bi sey ariyordum gecekten tessekurler !
18 Eylül 2007, 01:35
Denedim güzel çalıştı eline sağLık.
fakat $zip->unzipAll(”resimlerim”); bu dosyayı serverda ben oluşturdum sonra 777 yaptım yoksa yemiyor
11 Kasım 2007, 04:14
[…] read more | digg story […]