Obsługa archiwów ZIP w PHP. Część 1: Rozpakować?
październik 14th, 2008. Brak komentarzy.
Kategorie: PHP, Zabawy z kodem.
Dlaczego akurat o plikach .zip? Bo tak. Przydadzą nam się później.
W tej części pokażę, jak łatwo, nie korzystając z dodatkowych klas/funkcji rozpakować archiwum ZIP.
W pracy nad spakowanymi plikami pomogą nam następujące funkcje:
zip_open()– otwiera plik ZIP i zwraca uchwyt do zasobu archiwum
zip_read()– odczytuje kolejne pliki i zwraca uchwyty do ich zasobów
zip_entry_name()– zwraca nazwę pliku
zip_entry_filesize()– zwraca rozmiar pliku
zip_entry_read()– zwraca zawartość pliku
Cała filozofia polega na odczytywaniu w pętli danych o spakowanych plikach. Kod pozwalający na rozpakowanie archiwum wygląda następująco:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $zipFile = zip_open($nazwa_pliku]); // jesli plik byl wysylany do serwera przez formularz, mozemy // oczywiscie uzyc $_FILES["plik"]["tmp_name"] if($zipFile) { while($zipContent = zip_read($zipFile)) { $fileName = zip_entry_name($zipContent); $fileSize = zip_entry_filesize($zipContent); if(zip_entry_open($zipFile, $zipContent, "r")) { $fileContent = zip_entry_read($zipContent, $fileSize); $fileHandle = fopen($fileName, "w"); fwrite($fileHandle, $fileContent); fclose($fileHandle); } } zip_close($zipFile); } |
Krótkie objaśnienie:
$fileName– nazwa pliku spakowanego w naszym archiwum
$fileSize– rozmiar tego pliku…
$fileContent– …i jego zawartość
Oczywiście jest to najprostsza wersja kodu rozpakowującego. Ciekawym przykładem obsługi katalogów jest kod Floriana Wolfa. Wszystkich zainteresowanych lepszym zabezpieczeniem procedur zapisu plików zapraszam również do manuala funkcji fwrite().
W części drugiej pokażę, jak za pomocą prostej i ogólnie dostępnej klasy utworzyć archiwum ZIP. Stay tuned.