webmaster webmastering webdesign

Jesteś tutaj: webmade.org >> porady >> php + mysql

PHP i ZIP czy to możliwe?

autor: Piotr 'Redelek' Redel, ostatnia modyfikacja: 2007-12-04

szukaj: archiwizacja danych archiwizacja danych kompresja plików kompresja plików pakowanie plików pakowanie plików rozpakowywanie plików rozpakowywanie plików ZIP ZIP RAR RAR PHP PHP

Witam wszystkich czytelników po raz kolejny. Tym razem pokażę Wam , że za pomocą skryptów PHP można pakować i rozpakowywać pliki znajdujące się na zdalnym serwerze. Temat troszkę tajemniczy, ale zachęcam do przeczytania artykułu.

Jak wiadomo PHP jest bardzo wszechstronnym językiem kryje wiele funkcji i udostępnia wiele bibliotek, gdyby można było znać je wszystkie to naprawdę świat stał by otworem. Zajmijmy się pierwszym zagadnieniem czyli pakowaniem ZIP. Za poprawne działanie ZIP w php odpowiada biblioteka o nazwie zlib (PHP4.X ZZIPlib). Można ją pobrać ze strony producenta lub zainstalować z paczek dostępnych dla naszego serwera. Troszkę zaszaleję i najpierw pokażę skrypt, a potem wyjaśnię jak to działa i o co w tym chodzi.

Pakowanie plików za pomocą PHP

<?php
$zip = new ZipArchive();
$plik_arch = "testowy.zip";
	if ($zip->open($plik_arch, ZIPARCHIVE::CREATE) !==TRUE) {
		exit ("nie mogę zrobić pliku archiwum <$plik_arch>");
        }

$zip->addFormString("info.txt","Archiwum o nazwie $plik_arch zostało utowrzone w dniu ".date("Y-m-d H:i:s"));
$zip->addFile("plik_testowy.txt");
$zip->addFile("plik_testowy2.txt");
echo "Ilość plików spakowanych: ".(($zip->numFiles)-1) . "\n";
$zip->close();
?>

Jak widać skrypt jest bardzo prosty i dzięki niemu możemy cieszyć się plikiem zip o nazwie testowy.zip. Prawda, że nie takie trudne? Teraz troszkę wyjaśnię co zrobiliśmy.

Żeby biblioteka zip zadziałała, musimy ją zainicjować i robimy to za pomocą kodu

$zip = new ZipArchive();

Deklarujemy sobie swoją zmienną tak jak pokazałem w przykładzie powyżej (zip). Kolejnym etapem jest utworzenie pliku archiwum, do którego mają być spakowane nasze pliki.

$plik_arch = "testowy.zip"

Sprawdzamy czy nasz plik archiwum może być utworzony na serwerze i czy można go otworzyć

if ($zip->open($plik_arch, ZIPARCHIVE::CREATE) !==TRUE) {
  exit ("nie mogę zrobić pliku archiwum <$plik_arch>");
}

Jeśli wszystko jest dobrze to skrypt „leci” dalej, ale jeśli z jakichś powodów nie może odczytać pliku lub zapisać go, dostaniemy komunikat z błędem i zakończymy przetwarzanie skryptu.

$zip->addFormString("info.txt","Archiwum o nazwie $plik_arch zostało utowrzone w dniu ".date("Y-m-d H:i:s"))

spowoduje utworzenie pliku info.txt i umieści w nim wpis, o spakowanych plikach i dacie wykonania. Oczywiście możemy dodawać wiele takich wpisów.

Dzięki tym poleceniom dodamy piliki do archiwum:

$zip->addFile("plik_testowy.txt");
$zip->addFile("plik_testowy2.txt");

Ostatnie wpisy z naszego skryptu służą do informowania ile i jakich plików zostało umieszczonych w naszym archiwum. Na samym końcu zwalniamy klasę za pomocą:

$zip->close();

O, i to na tyle pakowania. Zajmijmy się rozpakowywaniem archiwum ZIP.

Rozpakowywanie plików za pomocą PHP

<?php
$zip = new ZipArchive;
$plik_arch = "testowy.zip";
if ($zip->open($plik_arch) !== TRUE) {

  echo "Powstały jakieś błędy sprawdź archiwum lub folder";
} else {

  $zip->extractTo('rozpakowane'.$plik_arch);
  $zip->close();
  echo "Pliki wypakowane do folderu rozpakowane".$pliki_arch;
}
?>

Skrypt rozpakowywania jest bardzo podobny do skryptu pakowania - zmienia się linijka

$zip->extractTo('rozpakowane'.$plik_arch);

Pliki zostaną wypakowane do folderu rozpakowane.

Prawda, że to bardzo proste? Teraz możemy się pokusić o połączenie moich dwóch artykułów „Wysyłanie pliku na serwer, a link do pliku w MySQL” i „PHP i zip, czy to możliwe?”. Dzięki temu pliki będą wysyłane na serwer w formie spakowanej. Oczywiście dzięki PHP można tworzyć archiwa zip oraz rar. Tę działkę zostawiam Wam. Mam nadzieję, że ten artykuł, tak jak i mi, pokazał Wam kolejne możliwości języka PHP.

Źródła:

Piotr 'Redelek' Redel

Osoby czytające tę publikację przeglądały również:

Oczekujesz profesjonalnej obługi?
Tworzenie stron www.
Odwiedź naszą stronę!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org