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');