Archiwa .tar.gz to standardowy sposób pakowania plików w systemach unixowych (na których działa większość serwerów). Można je tworzyć z poziomu PHP na dwa sposoby.
Tworzenie archiwów za pomocą PEAR::Archive_Tar
Pakiet Archive_Tar wchodzi w minimalny zestaw instalowany razem z PEAR. Aby utworzyć archiwum Tar, należy najpierw stworzyć nową instancję klasy Archive_Tar:
$tar = new Archive_Tar("nazwa pliku", "gz");
Zamiast „gz” można też wybrać „bz2″ (nieco wydajniejszy algorytm, ale nie zawsze obsługiwany pod Windows).
Następnie tworzymy listę plików do zarchiwizowania:
$pliki = array("plik1", "plik2", "plik3");
I wykonujemy metodę create:
$tar->create($pliki);
To wszystko. Metoda create robi wszystko za nas, łącznie z zamykaniem dostępu do pliku (nie musimy tego robić ręcznie, a właściwie to nawet nie ma metody do tego celu).
Jednak Archive_Tar ma dwa poważne ograniczenia. Jest bardzo powolny (w porównaniu z programem tar wykonywanym z linii poleceń – nawet kilkanaście razy wolniejszy). Po drugie, PHP ma wbudowane ograniczenie czasu wykonywania pliku. Domyślnie jest to 30 sekund i jeśli nie jesteśmy administratorami serwera, nie będziemy w stanie tego zmienić. Dlatego za pomocą Archive_Tar nie spakujemy na przykład plików bloga WordPress, jeśli chcielibyśmy zrobić w ten sposób backup. Aby ominąć to ograniczenie, trzeba zastosować polecenie PHP system(), którego czasu wykonywania nie wlicza się do ograniczenia, o którym wspomniałem przed chwilą.
Dokumentacja do Archive_Tar znajduje się tutaj.
Tworzenie archiwum Tar za pomocą PHP system()
Tworzenie archiwum w ten sposób polega na wykonaniu komendy w taki sam sposób, w jaki wykonalibyśmy ją z poziomu wiersza poleceń. Tak właśnie działa funkcja PHP system().
Komenda unixowa wygląda tak:
tar zcf nazwa_pliku_do_utworzenia.tar.gz plik1 plik2 plik 3 plikn
I krótkie objaśnienie: tar to nazwa programu. „zcf” to przełączniki:
- „z” – po utworzeniu spakuj do formatu gz (aby wybrać format bz2 można zmienić ten przełącznik na „j” – z tym, że może nie być obsługiwany),
- „c” – utwórz nowy plik
- „f” – powinno być na końcu, ponieważ po nim następuje nazwa nowego pliku archiwum.
„plik1″, „plik2″ itd. to ścieżki do plików, które mają zostać dołączone do nowego archiwum.
Teraz wykonujemy tę komendę z poziomu PHP:
system("tar zcf nazwa_pliku_do_utworzenia.tar.gz plik1 plik2 plik3 plikn");
Za chwilę w katalogu pojawi się nowe archiwum tar.gz, zawierające wskazane pliki.
