Obsługa archiwów ZIP w PHP. Część 1: Rozpakować?

No Comments

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.

Categories: PHP, Zabawy z kodem Tags: Tagi:, ,

Leave a Reply

Your email address will not be published. Required fields are marked *