Programowanie w języku PHP

Rozpakowywacz ZIP

  • 2006-12-08 20:13
  • 13 komentarzy
  • 1329 odsłon
  • Oceń ten tekst jako pierwszy

Opis:


Skrypt, którym zadaniem jest wypakowanie pliku zip do odpowiedniego pliku na serwerze. Skrypt jest dla osób, którzy trochę znają się trochę lepiej na php...


Parametry:


rozpakowywacz.php?plik=archiwum_zip.zip&sciezka=testowy_folder/&idz=testowy_folder/index.php

plik (wymagany) - plik zip (jeśli znajduje się w innym folderze niż plik skrypt, to wymaga na jest ścieżka do pliku. UWAGA nie wiem jak skrypt zachowuje się z plikami z innych serwerów)

sciezka (wymagany) - ścieżka do folderu, w którym ma być wypakowany zawartość archiwum.
UWAGA 1 - ścieżka musi już 'ręcznie' utworzona, na końcu musi być znak "/"
UWAGA 2 - w przypadku, gdy chcemy wypakować w bieżącym folderze należy wpisać "./"

idz - pliku który ma być otwarty po poprawnego zakończenia skryptu


Porada:


Jeśli w archiwum pliki i foldery znajdują się w jednym folderze, np. /phpBB/, to lepiej jest przepakować archiwum i opuścić folder phpBB


Źródło:


rozpakowywacz.php
<?php
 
/*
 
  UWAGA!!!
    Autor nie odpowiada za odpowiada w zaden sposob za dzialanie skryptu,
     wykorzystujesz go na WLASNE ryzyko.
 
 
  Autor: Krzysztof 'cys_ek' Mehl
     gg: 2599582 (zawsze niewidoczny)
    aqq: 4145488
    web: www.cys-ek.info
 
  Skrypt ten dedykuje najwspanialszej Dziewczynie - Justynie :*
 
 
  wykorzystano funkcje ze strony:
    http://www.w3schools.com/php/func_zip_entry_read.asp
*/
 
 
$sciezka = $_GET[ 'sciezka' ];
$plik = $_GET[ 'plik' ];
$idz = $_GET[ 'idz' ];
 
 
  // sprawdza, czy funkcja 'zip_open' jest obslugiwana przez serwer
  if ( function_exists( 'zip_open' ) ) {
 
    // zmienne $sciezka i $plik sa wymagane
    if ( $sciezka && $plik ){
      $zip = zip_open ( $plik );  // pobieranie uchwytu pliku zip
 
      if ( $zip ){
        // petla odczytujaca kolejny rekord z archiwum
        while ( $zip_entry = zip_read ( $zip ) ){
          // jesli nazwa 'zip_entry_name' jest zakonczona jest pzrez '/' to znaczy ze mamy do czynienia z folderem
          if ( preg_match ( "/\/$/", zip_entry_name ( $zip_entry ) ) ){
            // tworzenie folderu w $sciezka
            @mkdir ( $sciezka. zip_entry_name ( $zip_entry ) );
          } else {
            // 'otwieranie' rekordu
            if ( zip_entry_open( $zip, $zip_entry ) ){
              // tworzenie pliku $sciezka. zip_entry_name ( $zip_entry )
              $f = fopen ( $sciezka. zip_entry_name ( $zip_entry ), 'w' );
              // zapisywanie do pliku zip_entry_read ( $zip_entry, zip_entry_filesize ( $zip_entry ) ); zip_entry_filesize okresla glugosc rozpakowanego pliku
              fwrite ( $f, zip_entry_read ( $zip_entry, zip_entry_filesize ( $zip_entry ) ) );
              fclose ( $f );
              zip_entry_close ( $zip_entry );
            }
          }
        }
      zip_close( $zip );
      }
      if ( $idz ){
        // jesli podano zmienna $idz, to wystepuje przeniesienie do pliku $sciezka. $idz
        header( 'Location: '. $sciezka. $idz );
      }else{
        echo 'OK';
      }
    } else {
      echo 'wystapil blad';
    }
  }else{
    echo 'brak obslugi plikow zip na tym serwerze!';
  }
?>

13 komentarzy

MikiKam 2008-02-23 17:10

Nie wiadomo gdzie Justyna mu zagląda. Zawsze może jej tą dedykację przeczytać :)

speedypro 2008-01-20 01:01

A Justyna zagląda Ci w źródła? Jeśli nie, to w jaki sposób ujrzy dedykację?

cys_ek 2006-12-18 19:31

@NeooeN: a moze cos wiecej, z pliku zip nie tworzy folderów?

NeooeN 2006-12-16 14:50

A co z rozpakowywaniem katalogów?
Właśnie zauwarzyłem że je pomija, czy można to jakoś zmienić?

cys_ek 2006-12-07 20:20

@Marooned: przykład

@voldenet: no wiesz... spakowana wersja phpBB-2.0.21 zajmuje  688 039 bajtów i jest to w jednym pliku, a rozpakowana wersja (którą byś musiał przesłać na serwer) zajmuje  2 089 496 bajtów, i jest to w 302 plikach i 20 folderach, więc zysk czasu i transferu jest chyba oczywisty...

Ludomir 2006-12-07 20:18

Ogólnie to sporo błędów językowych - trochę się nieprzyjemnie czyta. Moim zdaniem w tym kodzie powinny być jakieś komentarze, w ogóle to słabo to opisane, to w końcu ma być artykuł - przynajmniej wydaje mi się, że w takim miejscu się znajduje :|

voldenet 2006-12-07 18:09

A co takiego niezwykłego tutaj widzimy?

Marooned 2006-12-07 17:52

a dlaczego w ogóle jest tu mowa o phpBB?

cys_ek 2006-12-06 22:35

dobra, to jak tak jest źle napisane to może usunąć artykuł a jak będę umiał już pisać normalnie to wtedy opublikować?

Coldpeer 2006-12-06 21:55

Zmieniłem tytuł, jeszcze wypadałoby poprawić w tekście.

cys_ek 2006-12-06 21:25

ok, a wie ktoś jak to zmienić? :/

niestety afazja ciągle działa na mnie :/ - sorrki :(

Marooned 2006-12-06 21:09

Chyba "rozpakowywacz" bo "rozpakowacz" to totalnie nie gramatycznie.

bordeux 2007-06-08 09:23

Dobry skrypt- bo działa!