Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php , zend] komercyjny downoad binarnych plikow., Skrypt do odpłatnego udostępniania treści BINARNYCH.
kostekplay
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 8.11.2008

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


Szukam klasy, innego rozwiązania, umożliwiającego mi udostępnienie odpłatne dużych plików binarnych.
Chodzi o pliki o rozmiarach 300 - 500 mb.
Pliki udostępniany by były płatnie na określoną ilość pobrań prze określonego użytkownika w danym czasie.
Po dokonaniu analizy w grę wchodą praktycznie trzy rozwiązania:
- zagonienie mysql lub postgress do udostępniania LONGBLOB
- stworzenie za pomocą np proftpd dynamicznych kont użytkownikow z dowiązanymi linkami do poboru na określony czas i ilość ...
- podwiązanie linku do maskowanego linku i jego domyślna translacja ( sa dobre tylko rozwiązania komercyjne )

ilość pobrań ok 200 / doba - łącze 100mbit/s , możliwości sprzętowe ( 4 proc, 8 GB itp, debian 6 )

problem polega na tym że dany link musi być aktywny TYLKO dla DANEJ OSOBY na OKLREŚLONĄ ilość pobrań i OKREŚLONY czas ...

czy ktoś ma uż coś takiego wdrożone i z praktycznej strony chciałby się podzielić doświadczniem ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Memcache - memcached - chodzi o idee (IMG:style_emoticons/default/wink.gif) Ja już sam nie pamiętam na czym to robiliśmy - serwer na pewno był memcached ale czy uzywaliśmy w PHP do łączenia i obsługi klasy memcache czy memcached to już nie pamiętam.

Co do pytania to opiszę po krótce na przykładzie.

Pliki trzymamy w /home/www/pliki/ - niedostępny przez www

Strona jest w /home/www/public_html/ - dostępny przez www

Ktoś chce pobrać plik. Przykładowo php.rar. Wchodzi więc na stronę (jest zalogowany, może pobierać itd.).

Pokazuje mu się link do pobrania pliku. Link ten jest generowany automatycznie przykładowo tak:

- Żądanie pliku php.rar (id:12345)
- Generowanie linku tymczasowego poprzez jakiś hash z id pliku, id usera, itp. do formatu np strona.pl/file/[hash]/php.rar
- Zapis do memcache 2 tablic pod kluczem [hash] oraz [hash]_counter z polami:
* dla [hash] - [id_pliku],[adres_ip_usera], itp...
* dla [hash]_counter - 10 (zakładmy że plik może być pobrany 10 razy)
- Oba obiekty memcache zapisane są z timeoutem 24h (takie założenie że 24h będzie aktywny link)

Teraz użytkownik klika link. Odpowiedni mod-rewrite wyciąga z adresu [hash] i sprawdza czy ma obiekt memcache pod takim kluczem.
Jeśli ma (czyli nie wygasł) sprawdza counter - jesli jest 0 to usuwa obiekty z memcache i zwraca błąd (wygaśnięcie linku), jeśli jest > 0 to:
- robi decrement na [hash]_counter,
- pobiera z bazy dane o pliku
- wywołuje header(...) z odpowiedni nagłowkiem typu x-sendfile oraz ewentualnym okresleniem prędkości pobierania oraz pliku z katalogu plików, który ma być przesłany. Ustawia odpowiednie nagłówki HTTP co do Content-type i size.

Plik się pobiera - uzytkownik jest happy. Samo pobieranie pliku idzie już poza PHP i jest regulowane przez serwer. Odpowiednia konfiguracja daje możliwość również sprawdzenia czy plik został pobrany w całości, poprzez PHP można również odczytać Content-range toteż umożliwić wznawianie pobierania itp. Wszystko to w jednym skrypcie do obsługi pobierania plików.

Tak generowane linki tymczasowe pozwalają na uzywanie download-managerów itd. Ponieważ przy samym pobieraniu nie jest sprawdzane kto pobiera plik (w sensie że user nie musi być zalogowany jak już ma link tymczasowy) jest to możliwe. Link tymczasowy jest generowany tylko przez zalogowanego użytkownika. Zatem nie ma mozliwości kombinowania i wpisywania linków z palca bo ich po prostu nie będzie. Jedyna możliwość do pobrania pliku bez styku z serwisem jest gdy ktoś miałby fart i "zgadł" jakiś hash do pliku, wpisał adres w przeglądarkę i plik by mu się pobrał. Można to jednak bardzo łatwo ukrócić poprzez dodanie do obiektu memcache pod kluczem [hash] adresu IP. Wówczas można by było sprawdzać czy wywołanie linku tymczasowego jest z tego samego adresu co jego generacja. Co wyklucza w praktyce jakiekolwiek próby pobierania plików dla tych którzy nie powinni tego móc zrobić.

Co do opłaty - gdzieś musi być pobierana opłata - domyśliłem się z tego co pisałeś, że byłaby to opłata za dany plik a nie jako abonament. Tak czy owak gdzieś trzeba ją upchnąć - jeśli dobrze Cię zrozumiałem to powinna znaleźć sie przy/przed generacją linku tymczasowego do pobrania pliku.

Jeśli chodzi o pomoc - to wierz mi - chciałbym pomóc - bo to jest bardzo ciekawy temat i mam w tym nieco doświadczenia - ale niestety czas mi na to nie pozwoli. Zawsze jednak mogę służyć radą lub "lekką" pomocą (IMG:style_emoticons/default/wink.gif)

Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 14.10.2025 - 00:33