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?<font color="red">plik=archiwum_zip.zip</span>&<font color="red">sciezka=testowy_folder/</span>&<font color="blue">idz=testowy_folder/index.php</span>
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!';
}
?>
Zmieniłem tytuł, jeszcze wypadałoby poprawić w tekście.
ok, a wie ktoś jak to zmienić? :/
niestety afazja ciągle działa na mnie :/ - sorrki :(
Chyba "rozpakowywacz" bo "rozpakowacz" to totalnie nie gramatycznie.
Dobry skrypt- bo działa!
dobra, to jak tak jest źle napisane to może usunąć artykuł a jak będę umiał już pisać normalnie to wtedy opublikować?
a dlaczego w ogóle jest tu mowa o phpBB?
A co takiego niezwykłego tutaj widzimy?
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 :|
@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...
A co z rozpakowywaniem katalogów?
Właśnie zauwarzyłem że je pomija, czy można to jakoś zmienić?
@NeooeN: a moze cos wiecej, z pliku zip nie tworzy folderów?
A Justyna zagląda Ci w źródła? Jeśli nie, to w jaki sposób ujrzy dedykację?
Nie wiadomo gdzie Justyna mu zagląda. Zawsze może jej tą dedykację przeczytać :)