Pagina 1 din 1

Creare arhiva RAR / ZIP cu php

Scris: Joi Sep 13, 2012
de steell
Salut
Vreau sa creez o arhiva ce va contine mai multe fisiere pentru a nu crea script ca sa descarce fiecare fisier in parte ci sa descarce o singura data arhiva respectiva.
De exemplu se cunosc deja numele a doua fisiere, si vreau ca printr-un script sa se adauge intr-o arhiva.

Arhiva sa contina fisierele pe care vreau sa le downloadez de pe serverul siteului.
Adica sa zicem ca printr-un formular uploadez 2 fisiere, vreau ca acele fisiere sa se adauge intr-o arhiva gen Winrar /Zip, ca sa nu stau sa downloadez fiecare fisier in parte ci sa descarc arhiva cu totul.
Am vazut ca atunci cand trimiti un email cu niste fisiere, acele fisiere se adauga intr-o arhiva automat in momentul uploadului (la yahoo am observat asta).
Cum se face asa ceva?

Creare arhiva RAR / ZIP cu php

Scris: Joi Sep 13, 2012
de MarPlo
PHP are functii de citire arhiva WinRar, la pagina:
php.net/manual/en/book.rar.php
- dar nu si de a crea arhiva RAR (motive de licentiere).
In schimb poti sa faci arhiva ZIP cu PHP. Codul din exemplu urmator arhiveaza 3 fisiere (pot fi cu extensie diferita) intr-o arhiva Zip.

Cod: Selectaţi tot

<?php
// Array cu adresa fisierelor ce vor fi adaugate in arhiva ZIP
$files = array('dir/file1.txt', 'dir/image.jpg', 'dir/audio.mp3');

$zip_file = 'dir_to/final.zip';     // calea si numele arhivei care va fi creata

$zip = new ZipArchive;       // creaza obiect de lucru cu clasa ZipArchive

// daca poate crea arhiva $zip_file, parcurge fisierele din $files si le adauga in arhiva
if($zip->open($zip_file, ZipArchive::CREATE) === TRUE) {
  foreach($files as $file){
    $zip->addFile($file);
  }
  $zip->close();
  echo 'Arhiva: '. $zip_file. ' a fost creata';
}
else "Unable to create: $zip_file";
- Documentatie si functiile PHP de citire /scriere arhiva Zip, la adresa: php.net/manual/en/book.zip.php

Daca vrei ca dupa procesul de arhivare sa fie si descarcata arhiva Zip, poti sa adaugi acest cod:

Cod: Selectaţi tot

// Codul de creare, sau preluare a arhivei

header('Content-type: application/zip');
header('Content-disposition: filename="' . $zip_file . '"');
header("Content-length: " . filesize($zip_file));
readfile($zip_file);
exit();