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. internette ç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. iyi 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. ilk 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.
















bunun birde gzip olanı var birde onu nasıl yapabileceyimiz anlatsan çok güzel olur pek güzel olur
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.
burda ing. anlatılmış daha önce de bakmıştım fakat neçare
Bu örnek işine yarar sanırım.
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
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
@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.Erhan abi teşekkürler.
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
Ben de böyle bişey arıyordum aylar önce
arşive alayım lazım olabilir
@Hasan
userbarlar da güzelmiş hani
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
@yakuter
Teşekkür etmesi gereken birisi varsa o da benim biliyorsun. Asıl sen sağol varol
Çok güZel Bir php betiği Bizimle Paylaştığın için teşekkürler
Aynı şekilde Klasor leride şifreleye bilseydi daha iyi olurdu
iyi çalışmalar
Ben BG den yaziyorum ben de uzun zamandir boyle bi sey ariyordum gecekten tessekurler !
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
Mrblar. Güzel bir yazı olmuş teşekkürler.
Ufak bir sorunum var. şu şekilde:
“Strict Standards: date() [function.date]: It is not safe to rely on the system’s timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Europe/Helsinki’ for ’3.0/DST’ instead in C:\AppServ\www\zip_class\dZip.inc.php on line 62
”
Localhostta çalışıyorum. Sorunumu nasıl çözebilirim? Yardımcı olabilirseniz sevinirim. Teşekkürler.
merhaba, resim değil de klasör nasıl şifreleyebiliriz? zipli olarak yedek almak istiyorum ? teşekkürler
teşekkürler
Merhaba,
Güzel ve faydalı bir yazı.
Teşekkür ederim.
Dizin içindeki tüm dosyaların ziplenmesi konusunda yardımcı olabilir misiniz? Dizin listeleme konusuna da göz attım ama dizin listelemeyi bu örneğe nasıl yerleştireceğim konusunda hiçbir fikrim yok.
Teşekkürler.