ďťż

[php]pakowanie plików problem z gzwrite

       

Podstrony


telcocafe

function gzcompressfile($source,$level=false){ $dest=$source.'.gz'; $mode='wb'.$level; $error=false; if($fp_out=gzopen($dest,$mode)){ if($fp_in=fopen($source,'rb')){ while(!feof($fp_in)) gzwrite($fp_out,fread($fp_in,1024*512)); fclose($fp_in); } else $error=true; gzclose($fp_out); } else $error=true; if($error) return false; else return $dest; }

Witam mam problem. Kod powyżej służy do pakowania pliczków. Niestety jedyne co mi się udało to pakowanie 1 pliku do jednego archiwum. W jaki sposób spakować np. 10 plików. Pętla się pewnie przyda ale brak mi pomysłu jak i gdzie. Czy jako argument funkcji podać tablicę plików?
Użytkownik Dawid-San edytował ten post 04 lipiec 2008, 12:15


Hmm... A ta funkcja w komentarzach? http://pl.php.net/gzwrite
// Edytowano
Zmieniłeś treść postu...
Wiesz w ogóle co robisz? Gzip służy do pakowania pojedynczych plików, więc kilku do jednego archiwum nie wepchniesz.
Użytkownik andrzej_aa edytował ten post 04 lipiec 2008, 12:19
yhm tego nie wiedziałem :/

a takie pytanie - co mi pozwoli na stworzenie archiwum które ma w sobie np. 10 zdjęć?
Użytkownik Dawid-San edytował ten post 04 lipiec 2008, 12:30
tutaj masz do zipa, nie wiem czy się przyda;)
http://www.forum.ith...likow-t454.html




(...)Gzip służy do pakowania pojedynczych plików, więc kilku do jednego archiwum nie wepchniesz.

Ewentualnie spakuj pojedyncze pliki, a potem je dodaj do archiwum TAR(zresztą jak coś ściągasz do Linuksa do najczęściej rozszerzenie to tar.gz lub tar.bz2 :) ).

Zajrzyj tu:
1. TAR File Management With PHP Archive_Tar
2. Creating ZIP and TAR archives on the fly with PHP

już wczesniej na to wpadlem. Jednak muszę mieć 1000% pewności, że biblioteka zlib pozwoli mi na stworzenie archiwum wielu plików, ponieważ to nie mój serwer i jest sporo zachodu z doinstalowaniem czegokolwiek

zobacz jeszcze to: http://forum.php.pl/...mp;#entry416697


już wczesniej na to wpadlem. Jednak muszę mieć 1000% pewności, że biblioteka zlib pozwoli mi na stworzenie archiwum wielu plików, ponieważ to nie mój serwer i jest sporo zachodu z doinstalowaniem czegokolwiek

Z tej drugiej strony, którą Ci podałem, żadnego skryptu nie trzeba instalować - wystarczy dać pojedynczy include.

A tak BTW, jeśli boisz się czegoś testować na docelowym serwerze, o czemu sobie Apache'a z PHP nie zainstalujesz w Windowsie?

loguś: ten link rzeczywiście też może pomóc :) Chociaż ZIP jest trochę wolniejszy, ale jak Autorowi nie przeszkadza to ok ;)

skorzystałem z tego linku -> http://www.forum.ith...likow-t454.html

tworze katalog, wrzucam do niego pliki które mają być spakowane. Odpalam plik. Tworzy archiwum, a w archiwum zamiast plików są puste katalogi o nazwach plików i lipa :/

A oglądałeś mój link? tam użyto klasy która bez problemu pakuje cały katalog


skorzystałem z tego linku -> http://www.forum.ith...likow-t454.html

tworze katalog, wrzucam do niego pliki które mają być spakowane. Odpalam plik. Tworzy archiwum, a w archiwum zamiast plików są puste katalogi o nazwach plików i lipa :/


Kolego, jak chcesz aby ktoś Ci pomógł to czytaj uważnie to, co Ci piszemy. Według mnie link logusia pasuje do tego, co powiedziałeś, więc czemu go omijasz?

właśnie się z nim zapoznaje i szukam klasy zipfile bez której to nie ruszy

jakby nie patrzeć, ten też był mój;) jak nie wiesz co jeszcze trzeba dołączyć do pliku(codzi mi o ten link: http://forum.php.pl/...p;#entry416697) to poczytaj to: http://php.rinet.ru/.../en/ref.zip.php

zasadniczo klasę zipfile już znalazłem. Dodałem. Archiwum jest tworzone, ale nadal jest puste - błędów żadnych nie zwraca

jest jeszcze jedno rozwiązanie, aż się dziwie że wcześniej na to nie wpadłem
system("zip -r folder1, folder2");

zasadniczo kod z php.pl powinien działać i się zastanawiam tylko czemu tworzy mi archiwum z pustym katalogiem

dodam, że właśnie odkomentowałem linie odpowiadające w tym kodzie za pakowanie pojedyńczego pliku. Archiwum powstało, plik w nim, ale zawartość pliku została zmieniona na jego nazwę :/
Użytkownik Dawid-San edytował ten post 04 lipiec 2008, 13:16
sory że zadam takie głupie pytanie,ale czy ten katalog który pakujesz ma w sobie jakieś pliki?

tak...dokładnie 11 :) Spoko rozumiem pytanie :D

a mój ostatni sposób próbowałeś?

właśnie go przetestowałem. Zasadniczo nic się nie dzieje, może coś źle zrobiłem :P Szukałem w manualu o tym, ale nic nie znalazłem.
bo zakładam, że to ma być coś takiego
system("zip -r katalog_pakowany, katalog_docelowy???);
i czy to ma być cały kod czy coś jeszcze?

na odwrót;p np:
system("zip -r nazwa_archiwum.zip zdjecia???);gdzie zdjecia to folder;)

DLA POTOMNYCH ----> http://phpclasses.to.../file/9524.html

loguś wielkie dzięki za poświęcony czas:) Naprowadziłeś mnie dobrze i w końcu znalazłem. Link powyżej zawiera klasę pakującą pliki. Aktualnie zastosowałem dla sprawdzenia dla pojedyńczych plików, ale myślę, że spakowanie wielu plików to żaden problem :)

Przykładowe zastosowanie klasy dla dwóch plików
<?php include_once("zipfile.php"); $createZip = new createZip; $createZip -> addDirectory("dir/"); //$fileContents = file_get_contents("config.inc"); //$createZip -> addFile($fileContents, "testt/config.inc"); //$createZip -> addFile($fileContents, "testt/style.css"); $fileContents1 = file_get_contents("config.inc"); $fileContents2 = file_get_contents("style.css"); $createZip -> addFile($fileContents1, "testt/config.inc"); $createZip -> addFile($fileContents2, "testt/style.css"); $fileName = "archive.zip"; $fd = fopen ($fileName, "wb"); $out = fwrite ($fd, $createZip -> getZippedfile()); fclose ($fd); $createZip -> forceDownload($fileName); @unlink($fileName); ?>
Użytkownik Dawid-San edytował ten post 04 lipiec 2008, 13:59
a miało być tak pięknie...powyższy kod PRAWIE działa. Kiedy pakuję nim pliki .jpg to archiwum jest nie do razpakowania ponieważ jest uszkodzone :/ ktoś wie co może być przyczyną ?

może wykonywanie operacji zostaje w pewnym momencie przerwane?

Uszkodzone... Edytuj w notatniku, może jakieś błędy śmiecą binarkę.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.