Arşiv sayfasından bütün yazılarıma ulaşabilirsiniz

PHP ile zip dosyaları oluşturmak ve açmak

zip 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:
  1. <?php
  2.     include("dzip.inc.php");
  3.     $zip = new dZip("resimler.zip");
  4.         $zip->addFile("resim_1.png", "resim_1.png");
  5.         $zip->addFile("resim_2.jpg", "resim_2.jpg");
  6.         $zip->addFile("resim_3.gif", "baska_isimde_resim.gif");
  7.     $zip->save();
  8. ?>

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.

resimler.zip dosyasının içeriği
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:
  1. <?php
  2.     include("dUnzip2.inc.php");
  3.     $zip = new dUnzip2("resimler.zip");
  4.     $zip->unzipAll("resimlerim");
  5. ?>

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.

EkleBunu Sosyal Paylaşım Butonu

18 yorum var

  1. bunun birde gzip olanı var birde onu nasıl yapabileceyimiz anlatsan çok güzel olur pek güzel olur

  2. 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.

  3. burda ing. anlatılmış daha önce de bakmıştım fakat neçare

  4. 
    <?php
      	function gzYap($srcName, $dstName)
      	{
    	  	$fp = fopen($srcName, "r");
    	  	$data = fread ($fp, filesize($srcName));
    	  	fclose($fp);
    
    	  	$zp = gzopen($dstName, "w9");
    	  	gzwrite($zp, $data);
    	  	gzclose($zp);
    	}
    
    	gzYap("resim.png", "resim.png.gz");
    ?>
    
    

    Bu örnek işine yarar sanırım.

  5. 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

  6. 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

  7. @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.

  8. Erhan abi teşekkürler.

  9. 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

  10. Ben de böyle bişey arıyordum aylar önce :) arşive alayım lazım olabilir

  11. @Hasan
    userbarlar da güzelmiş hani :D

  12. 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 :)

  13. […] 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 […]

  14. @yakuter
    Teşekkür etmesi gereken birisi varsa o da benim biliyorsun. Asıl sen sağol varol ;)

  15. Ç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

  16. Ben BG den yaziyorum ben de uzun zamandir boyle bi sey ariyordum gecekten tessekurler !

  17. 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 :D

  18. […] read more | digg story […]

İçinizde kalmasın, siz de yorum yazın.