Podręcznik użytkownika CodeIgniter wersja 2.2.1


Klasa kodowania Zip

Klasa kodowania Zip pozwala na tworzenie archiwów Zip. Archiwa te mogą zostać pobrane na Twój komputer lub zachowane w katalogu na serwerze.

Inicjalizowanie klasy

Tak jak większość innych klas w CodeIgniterze, klasa Zip jest inicjalizowana w Twoim kontrolerze poprzez funkcję $this->load->library:

$this->load->library('zip');

Po załadowaniu, obiekt klasy Zip będzie dostępny poprzez wywołanie: $this->zip

Przykład użycia

Ten przykład demonstruje w jaki sposób skompresować pliki, zachować je w katalogu na serwerze i później pobrać na Twój komputer.

$name = 'mydata1.txt';
$data = 'A Data String!';

$this->zip->add_data($name, $data);

// Zapisz plik zip do folderu na serwerze. Plik nazwij "my_backup.zip"
$this->zip->archive('/path/to/directory/my_backup.zip');

// Pobierz plik na swój komputer. Plik nazwij "my_backup.zip"
$this->zip->download('my_backup.zip');

Spis funkcji

$this->zip->add_data()

Pozwala na dodanie danych do archiwum Zip. Pierwszy parametr musi zawierać nazwę jaką chciałbyś nadać plikowi, a drugi parametr musi zawierać dane w postaci ciągu:

$name = 'my_bio.txt';
$data = 'I was born in an elevator...';

$this->zip->add_data($name, $data);

Możesz wykonać wiele odwołań do tej funkcji, aby dodać kilka plików do archiwum. Przykład:

$name = 'mydata1.txt';
$data = 'A Data String!';
$this->zip->add_data($name, $data);

$name = 'mydata2.txt';
$data = 'Another Data String!';
$this->zip->add_data($name, $data);

Możesz również przypisać wiele plików za pomocą tablicy:

$data = array(
                'mydata1.txt' => 'A Data String!',
                'mydata2.txt' => 'Another Data String!'
            );

$this->zip->add_data($data);

$this->zip->download('my_backup.zip');

Jeśli chcałbyś aby Twoje dane zostały umieszczone w subfolderach, dodaj ścieżkę jako część nazwy pliku:

$name = 'personal/my_bio.txt';
$data = 'I was born in an elevator...';

$this->zip->add_data($name, $data);

Powyższy przykład umieści plik my_bio.txt wewnątrz folderu o nazwie personal.

$this->zip->add_dir()

Pozwala na dodanie folderu. Zazwyczaj ta funkcja nie jest potrzebna, ponieważ możesz umieszczać dane w subfolderach za pomocą funkcji $this->zip->add_data(), ale jeśli będziesz chciał utworzyć pusty folder, to możesz to zrobić. Przykład:

$this->zip->add_dir('myfolder'); // Tworzy folder o nazwie "myfolder"

$this->zip->read_file()

Pozwala na skompresowanie pliku, który już istnieje gdzieś na Twoim serwerze. Wystarczy dostarczyć ścieżkę, a klasa Zip wczyta plik i doda go do archiwum:

$path = '/path/to/photo.jpg';

$this->zip->read_file($path);

// Pobierz plik na swoj komputer. Plik nazwij "my_backup.zip"
$this->zip->download('my_backup.zip');

Jeśli chcesz aby archiwum Zip zawierało również strukturę folderów dla danego pliku, wystarczy że przypiszesz wartość TRUE (boolean) w drugim parametrze. Przykład:

$path = '/path/to/photo.jpg';

$this->zip->read_file($path, TRUE);

// Pobierz plik na swoj komputer. Plik nazwij "my_backup.zip"
$this->zip->download('my_backup.zip');

W powyższym przykładzie, plik photo.jpg zostanie umieszczony wewnątrz dwóch folderów: path/to/

$this->zip->read_dir()

Pozwala na kompresję folderu (i jego zawartości), ktory istnieje już gdzieś na Twoim serwerze. Wystarczy dostarczyć ścieżkę do folderu, a klasa Zip przeszuka w sposób rekursywny cały folder i odtworzy całą strukturę w archiwum. Wszystkie pliki, które znajdują się w danym folderze oraz wszystkie subfoldery, zostaną zarchiwizowane. Przykład:

$path = '/path/to/your/directory/';

$this->zip->read_dir($path);

// Pobierz plik na swoj komputer. Plik nazwij "my_backup.zip"
$this->zip->download('my_backup.zip');

Domyślnie, archiwum Zip będzie zawierało wszystkie foldery, które zostały umieszczone w pierwszym parametrze. Jeśli chcesz, aby foldery poprzedzające docelowy katalog zostały pominięte, mozesz przypisać wartość FALSE (boolean) w drugim parametrze. Przykład:

$path = '/path/to/your/directory/';

$this->zip->read_dir($path, FALSE);

To stworzy plik Zip z folderem "directory" w środku i pozostałymi subfolderami, ale nie dołączy katalogów /path/to/your.

$this->zip->archive()

Zapisuje plik Zip do folderu na Twoim serwerze. Musisz podać poprawną ścieżkę serwerową, zakończoną nazwą pliku. Upewnij się, że folder ma prawa zapisu (zazwyczaj 666 lub 777). Przykład:

$this->zip->archive('/path/to/folder/myarchive.zip'); // Tworzy plik o nazwie myarchive.zip

$this->zip->download()

Powoduje pobranie pliku Zip z Twojego serwera. Do tej funkcji musi być przypisana nazwa, jaką chcesz uzyskać dla pliku. Przykład:

$this->zip->download('latest_stuff.zip'); // Plik zostanie nazwany "latest_stuff.zip"

Uwaga:  Nie wyświetlaj żadnych danych w kontrolerze, w ktorym wywołujesz tę funkcję, ponieważ wysyła ona wiele nagłówków w celu uruchomienia ściągania pliku i traktowania go jako plik binarny.

$this->zip->get_zip()

Zwraca skompresowane dane pliku. Generalnie nie będziesz potrzebował tej funkcji, chyba że będziesz chciał zrobić coś unikalnego z danymi. Przykład:

$name = 'my_bio.txt';
$data = 'I was born in an elevator...';

$this->zip->add_data($name, $data);

$zip_file = $this->zip->get_zip();

$this->zip->clear_data()

Klasa Zip cache'uje Twoje dane, aby nie musiały być dekompilowane przy każdorazowym użyciu powyższych funkcji. Jeśli jednak chcesz stworzyć wiele plików Zip, każdy z innymi danymi, możesz wyczyścić cache pomiędzy wywołaniami. Przykład:

$name = 'my_bio.txt';
$data = 'I was born in an elevator...';

$this->zip->add_data($name, $data);
$zip_file = $this->zip->get_zip();

$this->zip->clear_data();

$name = 'photo.jpg';
$this->zip->read_file("/path/to/photo.jpg"); // Odczytuje zawartość pliku


$this->zip->download('myphotos.zip');