Prvi ste put ovdje? Pročitajte faq i registrirajte se.
x
  • Registracija
Dobrodošli, ovdje možete postavljati pitanja vezana za problematiku programiranja. Da bi postavili pitanje nije potrebna registracija :)

149 pitanja

181 odgovora

158 komentara

1,863 korisnika

Zadnje značke

Potvrđeni korisnik
AlberthaBeau...
Potvrđeni korisnik
AngelinaCarr...
Vrhunsko pitanje
Esmin Kadusc...
Potvrđeni korisnik
ShermanAzr56...
Potvrđeni korisnik
KarlSweetapp...

Kako zipnuti odabrane datoteke iz različitih direktorija i poslati zip korisniku?

+8 glasova

Imam instaliran Cent OS 6 sa LAMP serverom. Iz MySQL baze izvlačim listu dokumenata različitih formata koje su razbacane po direktorijima korisnika.

Kako u php-u "on fly" zazipati samo odabrane dokumente i poslati korisniku dokumenti.zip?

Za sada sam probao nešto u ovom stilu:

 exec('zip -r -j zip_za_korisnike /dir1/doc.xml1 /dir2/doc1.xls /dir 2/subdir1/doc1.pdf');

Nakon toga generiram link i to je više manje to. To uredno radi ALI...
Prikažem korisniku link i zip je spreman za preuzimanje.

Da li je moguće i kako da se generirani zip šalje korisnicima "on fly" u trenutku generiranja? Valjda će netko shvatiti što bi htio.

Upit Lis 15, 2012 anonimno  
   

Odgovor 1

+2 glasova

Probao par načina ali ovaj mi je na kraju radio OK:

/*
Ako su $dokumenti polje:
$dokumenti = array(
    '/dir1/doc.xml1',
    '/dir2/doc1.xls',
    '/dir2/subdir1/doc1.pdf',
);
 */
$string_sa popisom_dokumenata = '';
$bufer = '';

if( is_array($dokumenti) AND ! empty($dokumenti))
{
    foreach ($dokumenti as $dokument)
    {
        if(file_exists($dokument))
        {
            //$string_sa_popisom_dokumenata = ' /dir1/doc.xml1  /dir2/doc1.xls  /dir2/subdir1/doc1.pdf ';
            $string_sa_popisom_dokumenata .= ' '.$dokument.' ';
        }
    }

    //lajna za zipanje svih dokumenata iz polja
    $zip = popen('zip -r -j - '.$string_sa_popisom_dokumenata.' ', 'r');

    //hederi za zip i naziv zipa za korisnike
    header('Content-type: application/zip');
    header('Content-disposition: attachment; filename="'.date('d.m.Y').'.zip"');

    //zipaj u čankovima i šalji
    while(!feof($zip)) 
    {
       $bufer = fread($zip, 8192);
       echo $bufer;
       flush();
    }
    //ubij proces
    pclose($zip);
}
Odgovoreno Lis 16, 2012 yosip (508)