Rozpakowywacz ZIP
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!';
}
?>
/*
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!';
}
?>



Właśnie zauwarzyłem że je pomija, czy można to jakoś zmienić?
@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...
niestety afazja ciągle działa na mnie