Php İle Zip Download
-
Sabah beridir deniyorum bir türlü netice alamadım,
Veritabanında yapılan sorgu sonucunda dosyaların dizinleri ve dosya isimleri çıktısını kullanarak,
Bu ayrı ayrı dizinlerdeki her dosyası tek bir zipte toplayıp download etmek amacım.
Örneğin;
klasor1/dosya1.jpg
klasor2/dosya2.jpg
...
gibi SQL çıktısına göre Zipleyip download ettirmek.
Ancak bir türlü sonuca ulaşamadım. Fikri olan, yol gösterebilecek olan arkadaşlara şimdiden teşekkürler.
-
Cpanel'den Dosya Dizinini kullanarak indirmeyi denediniz mi?
-
yok hocam amacım o değil.
örneğin ödemeler kelimesini post ettirip SQL sorgusu sonucunda ödemeler adı altında tüm dökümanlara erişebiliyorum ve bunları tek link halinde download'da edebiliyorum.
ancak benim amacım tek tek indirmek yerine ödemeler kelimesi geçen bütün dosyaları tek seferde indirebilmek. dosyalar ayrı ayrı dizinlerde olduğu için download'da takıldım.
-
<?php $files = array('Dear GP.docx','ecommerce.doc'); # create new zip opbject $zip = new ZipArchive(); # create a temp file & open it $tmp_file = tempnam('.',''); $zip->open($tmp_file, ZipArchive::CREATE); # loop through each file foreach($files as $file){ # download file $download_file = file_get_contents($file); #add it to the zip $zip->addFromString(basename($file),$download_file); } # close zip $zip->close(); # send the file to the browser as a download header('Content-disposition: attachment; filename=Resumes.zip'); header('Content-type: application/zip'); readfile($tmp_file); ?>
bu kodu denedınmı hocam basıt bır seye benzıyor
-
evet hocam denedim, tekli olarak dosyaları alabiliyorum. ancak sql çıktısındaki dizin ve dosya isimlerini kullanarak yapmayı beceremedim bir türlü. nette araştırdım bu türle ilgili bir örnek ya da kaynak bulamadım.
-
Hocam sunucunda php exec komutu çalıştırmaya izin varsa şu şekilde deneyebilirsin;
exec("zip $arsivismi $dosya1 $dosya2 ... $dosyaN");
Not: Sunucuda zip yüklü değilse yüklemen gerekir. -
hocam tek ziple indirmek istiyorsan
önce sql den aldığın dosya yollarını bi döngü ile tek bir klasöre kopyalaman lazım sonra zip leyip down ettirmen daha mantıklı
-
@lazz adlı arkadaşın verdiği kod çalışmalı. Algoritmada basit;
Dizinleri dizide topla
Zip oluştur
Her bir dizinin varlığını kontrol et, string olarak oku ve addFromString ile ekle
Zipi kapat
İndirmeye yolla.
-
Sorunu çözdüm , foreach'ten kurtulunca halloldu. İhtiyac duyanlara lazım olabilir paylasiyorum ornek halini. Yardımcı olan arkadaşlara teşekkürler.
<? include("baglan.php"); if ($_GET){ # create new zip opbject $zip = new ZipArchive(); # create a temp file & open it $tmp_file = tempnam('./tmp',''); $zip->open($tmp_file, ZipArchive::CREATE); $search=$_GET["id"]; $result = mysql_query("SELECT dosya,yol FROM dosyalar WHERE dosya LIKE '$search'"); $bulunan=0; if (empty($search)){ echo 'Arama alanını boş bıraktın'; }else{ if (mysql_num_rows($result)>0){ while($r=mysql_fetch_array($result)) { $bulunan++; $dosya=$r["dosya"]; $yol=$r["yol"]; $filename=$yol.$dosya; # download file $download_file = file_get_contents($filename); #add it to the zip $zip->addFromString(basename($filename),$download_file); } } } } # close zip $zip->close(); # send the file to the browser as a download header('Content-disposition: attachment; filename='.$dosya.'.zip'); header('Content-type: application/zip'); readfile($tmp_file); ?>
cankol tarafından 01/Nis/16 18:15 tarihinde düzenlenmiştir
