Zabranenie/povolenie download-u suborov

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tomolas
Člen | 66
+
0
-

Zdravim vsetkych!

Mam asi trochu off-topic vseobecnejsiu otazku.
Rozmyslam, ako riesit problem s dowloadovanim suborov po nejakej akcii (napriklad uspesna platba).
Subor nesmie byt priamo pristupny (http://example.com/file.mp3 nesmie fungovat), ale musi existovat nejaky sposob, ako sa k suboru dostat.

Mate niekto s tymto skusenost? Ako sa toto vo vseobecnosti riesi?
Zatial som si vsimol DownloadResponse, a FileDownloader v doplnkoch, ale neviem ci to nejak pomoze riesit to o com som pisal.

Diki za kazdy nazor!
Tomas

srigi
Nette Blogger | 558
+
0
-

Vo vseobecnosti s pomocou PHP mozes iba:

  1. umiestnit subor niekam do dosahu Apache a nechat klienta subor standardne stiahnut (dat mu odkaz)
  2. nacitat obsah suboru do premennej (pamati) a tu nasledne so spravnymi hlavickami vyechovat na vystup.

Mozes to a vylepsit, tak ze ten subor nebude na rovnakom mieste 2× (po stiahnuti ho presunies niekam inam). Ale kym ho taha jeden, moze ho na rovnakej adrese najst aj druhy klient.

b ma ten problem, ze subor sa musi natiahnut do pamati co vylucuje 700MB DivXi a pod. Mozno niekto poradi lepsie, ale myslim si, ze toto v PHP nevyriesis inak ako 700MB memory limitom.

V tomto ohlade maju vyhodu tzv. runtime prostredia (Node.js), ktore to dokazu streamovat priamo.

Editoval srigi (7. 12. 2010 19:19)

Vyki
Člen | 388
+
0
-

Můžeš použít filedownloader od Honzi Kuchaře.

tomolas
Člen | 66
+
0
-

Dakujem vsetkym velmi pekne za odpovede.
Asi to vyriesim niecim pribuznym k spominanej variante A. Uvazujem nad vytvaranim linkov (prikaz ln v linuxe), ktoremu bude predchadzat autentifikacia. Myslienka je, ze samotny ‚tajny‘ subor bude mat nastavene prava tak, aby ho server nevedel citat, ale stane sa dostupnym pomocou vytvoreneho hard-linku. No musim to este domysliet.

Este raz dakujem za nazory.

mcmatak
Člen | 504
+
0
-

asi jedine spravne reseni je nacitani souboru a odesilat ho na vystup, soubor se samozrejme nemusi nacitat cely do pameti ale da se nacitat po bytech fread atd. proste koukni na php manual po filesystem funkcich, myslim ze v prikladech od lidi je dokonce to co presne hledas