Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kompresja katalogu do gzip, czyli taki auto-download
DJSuperMEN
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 20.09.2004

Ostrzeżenie: (0%)
-----


Witam smile.gif, to mój pierwszy post i mam nadzieję że nie zostane odrazu skarcony tongue.gif

Jak wiecie w internecie jest coraz wiecej cwaniaków, którzy lubią robić down load-y z adresami z innych serwerów, pobierając tym samym ich tranfer. Jest wiele metod aby temu zapobiegać, i właśnie zainteresowałem się tym tematem.

Chciałbym zrobić coś takiego smile.gif, a mianowicie:

Osoba wchodzi na strone i klika w download.php?id=cos_tam

teraz srypt download.php szuka katalogu o nazwie (w katalogu w którym są pliki) cos_tam i kompresuje go do formatu gzip, daje mu wygenerowaną nazwę a następnie wysyła headerem do przeglądarki, no i user pobiera sobie ładnie pliczek wytworzony automatycznie przez skrypt.

Najważniejszym priorytetem tutaj jest dla mnie skompresowanie katalogu cos_tam (potem jest łatwosc jezeli sie buga wykryje i wysyła sie odrazu pliczek na serwer, jako .php i nie trzeba zip-ków ani rar-ów robić).

Proszę Was o pomoc, dzięki z góry winksmiley.jpg

//OT:ON// PS. DLA OSOBY KTÓRA POLECI MI SKORZYSTAC Z JAKŻE POŻYTECZNEJ FUNKCJI SZUKAJ - INFORMACJA : szukałem i po wpisaniu gzip otrzymuje dwa nic nieznaczące wyniki//OT:OFF//
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
NuLL
post
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


opendir" title="Zobacz w manualu PHP" target="_manual
readdir" title="Zobacz w manualu PHP" target="_manual
closedir" title="Zobacz w manualu PHP" target="_manual

No i jeszcze obsluga gZipa czyli http://pl.php.net/manual/pl/ref.zlib.php

Wiecej chyba nie jest potrzebne.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
DJSuperMEN
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 20.09.2004

Ostrzeżenie: (0%)
-----


Witam ponownie smile.gif

Zmonciłem coś takiego:
  1. <?php
  2.  
  3.  
  4. function compress( $srcFileName, $dstFileName )
  5. {
  6.  // getting file content
  7.  $fp = opendir( $srcFileName);
  8.  $file = readdir($fp);
  9.  closedir($fp);
  10.  
  11.  // writing compressed file
  12.  $file2 = gzopen( $dstFileName, &#092;"w9\" );
  13.  gzwrite( $file2, $file );
  14.  gzclose( $file2);
  15. }
  16.  
  17. compress ('katalog', 'plik.gz');
  18.  
  19. ?>


Teraz zapisuje mi katalog 'katalog' do pliku 'plik.gz' na serwerze.

Tylko mam 2 problemy z nim, a mianowicie:

1 - nie zapisuje zawartości katalogu, a jedynie tworzy pusty plik 'plik.gz'

2 - jak zrobić aby ten pilk nie zapisywał sie na dysku, ale odrazu był wysyłany do przeglądarki

Pomożecie, dzięki winksmiley.jpg
Go to the top of the page
+Quote Post
dasko
post
Post #4





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 9.11.2004

Ostrzeżenie: (0%)
-----


Eeh, to nie jest takie proste...

Gzip to algorytm kompresji, więc nie uda Ci się osiągnać jakiejkolwiek struktury katalogowej w pliku - do tego trzeba użyć jednego ze sposobów archiwizacji - najlepiej TAR(polecam), a potem dopiero plik TAR przelecieć Gzipem. Niestety archwizatora TAR nie wbudowano w php, więc albo sobie napiszesz do tego jakąś funkcje, albo poszukasz gotowej klasy - np. w PEAR.

Jeśli podejmiesz się napisania tego czegoś(nic trudnego, wystarczy znac strukture nagłówka pliku w TARze), to poszukaj sobie na google o formacie TAR(ja tak robiłem, polecam wikipedie), albo przepisz z PEARa winksmiley.jpg
Go to the top of the page
+Quote Post
DJSuperMEN
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 20.09.2004

Ostrzeżenie: (0%)
-----


OK, wiec jezeli tak mówisz to musi byc prawda biggrin.gif

Znalazem klasę do obsługi "chyba" właśnie tego co napisałeś.

Znajduje się ona pod adresem:
http://cvs.sourceforge.net/viewcvs.py/xoop...tar.php?rev=1.4

Jako że jestem zielony w programoaniu obiektowym (jak i w obłudze klas) mógłby mi ktoś napisać czy:

1 - to dobra klasa właśnie do tego czego szukam
2- jak ją wykorzystać (polecenia napiszcie)

Jeszcze raz dziękuję za pomoc i czekam na odpowiedzi z niecierpliowścią smile.gif
Go to the top of the page
+Quote Post
nocnyMark()
post
Post #6





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 26.04.2004

Ostrzeżenie: (0%)
-----


DJu z mojej strony moge Ci zaproponowac gotowy skrypt, ktory mozna wykorzystywac na licencji GNU

http://www.phpconcept.net/pclzip/index.en.php

produkuje on pliki do zip'a

w readmie masz sposob jak go wykrzystac w calosci,

ja podam Ci tylko w skrocie jak go uzywam abys zobaczyl ze nie jest skomplikowany:

  1. <?php
  2. $filename = 'nazwa_pliku.zip';
  3.  
  4. $mime_type = (USER_BROWSER_AGENT == 'IE' || USER_BROWSER_AGENT == 'OPERA')
  5.  ? 'application/octetstream'
  6.  : 'application/octet-stream';
  7.  
  8. require_once('tools/pclzip.lib.php'); //tutaj podaje sciezke do pliku pclzip.lib.php
  9.  
  10. $archive = new PclZip('c:/www/archiwum/'.$filename); //tworze plik archiwum i wybieram katalog docelowy
  11.  
  12. //a tu podaje jakie katalogi ida do archiwum, i jakie sciezki usunac z archiwum
  13. $v_list = $archive->add('c:/www/'.$dystrybucja.'/,c:/mysql/data/'.$dystrybucja.'/', 
  14. PCLZIP_OPT_ADD_PATH, '',
  15. PCLZIP_OPT_REMOVE_PATH, 'c:/www/'.$dystrybucja.'/');
  16.  
  17. ?>
Go to the top of the page
+Quote Post
DJSuperMEN
post
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 20.09.2004

Ostrzeżenie: (0%)
-----


Dzięki wielkie za pomoc. Wszystko działa.

Teraz to, co opracowałem niech posłuży potomnym, którzy pewnie też bedą mieli pobobny problem. Systemu nie idzie oszukac, to swietna metoda na bezpieczny, i dobry download smile.gif


plik download.php
  1. <?php
  2. $filename = uniqid(rand()).'.zip'; // nazwa pliku tworzona automatycznie
  3.  
  4. $mime_type = (USER_BROWSER_AGENT == 'IE' || USER_BROWSER_AGENT)'application/octetstream' : 'application/octet-stream';
  5.  
  6. require_once('pclzip.lib.php'); //tutaj podaje sciezke do pliku pclzip.lib.php
  7.  
  8. $archive = new PclZip('c:/WebServ/httpd/gzip/cache/'.$filename); //tworze plik archiwum i wybieram katalog docelowy
  9.  
  10. //a tu podaje jakie katalogi ida do archiwum, i jakie sciezki usunac z archiwum
  11. $v_list = $archive->add('c:/WebServ/httpd/gzip/katalog', PCLZIP_OPT_ADD_PATH, '', PCLZIP_OPT_REMOVE_PATH, 'c:/WebServ/httpd/gzip/katalog');
  12.  
  13. // tutaj wysyłam plik do przeglądarki
  14. header(&#092;"Content-type: application/octet-stream\");
  15. header(&#092;"Content-disposition: attachment; filename=houres3.zip\");
  16. readfile('cache/'.$filename.'');
  17.  
  18. // a na koncu go kasuje
  19. unlink('cache/'.$filename.'');
  20. ?>


Do kodu który napisałem trzeba utworzyc katalog cache o chmodzie 777.

Jeszcze raz dzięki za pomoc smile.gif, thanks for all
Go to the top of the page
+Quote Post
elessar
post
Post #8





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 12.05.2003
Skąd: Mikołów

Ostrzeżenie: (0%)
-----


Powinienes jeszcze sprawdzac skad wywolywany jest skrypt.

Bo co jesli ktos u siebie w download da link: (...)download.php?id=cos_tam ?


--------------------
..::elessar::..
Go to the top of the page
+Quote Post
DJSuperMEN
post
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 20.09.2004

Ostrzeżenie: (0%)
-----


Cytat
Powinienes jeszcze sprawdzac skad wywolywany jest skrypt.

Bo co jesli ktos u siebie w download da link: (...)download.php?id=cos_tam ?


Może zanim cos napiszesz pomysl, to nie boli smile.gif

Tytuł tematu to Kompresja katalogu do gzip a nie robimy Download z DJ-em.
Ja sie wszystkiego co chciałem dowiedziałem, a ty jak czegos nie wiesz załóż nowy temat.

papa, biggrin.gif
Go to the top of the page
+Quote Post
mynio
post
Post #10





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 25.03.2005

Ostrzeżenie: (0%)
-----


witam,
może to Ci pomoże:
http://php5.pl/php/przesylanie_danych_z_wy..._kompresji_gzip

pzdr
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 09:01