Ograniczenie prędkosci pobierania pliku

0

Witam, jestem w trakcie pisania prostego, tematycznego CMS'a. Moje pytanie dotyczy następującego zagadnienia :

Mam na stronie system downloadu (ilość pobrań, transfer = ilość pobrań x waga pliku, data ostatniego pobrania etc).

Chciałbym wprowadzić ograniczenie prędkości pobierania danego pliku, do określonej prędkości dla nie zarejestrowanych użytkowników, natomiast dla użytkowników zarejestrowanych udostępnić pełną prędkość łącza. (coś na zasadzie rapidshare.com i innych serwisów tego typu, tyle tylko, że na mojej stronie wystarczy się zarejestrować)

I tu powstaje problem, bowiem nie wiem jak się do tego zabrać - nawet od strony teoretycznej.
Czy ma ktoś jakieś informacje na ten temat ? Ew. jakiś działający klon serwisu, kod na którym mógłbym zobaczyć (zbadać) działanie takiego rozwiązania ?

0

Prefiks się nie nadaje. PHP po wydrukowaniu zawartości bufora kończy swoją pracę, a więc nijak tego nie skontrolujesz. Odpowiedniejsze byłoby tu CGI lub Perl które działają "bliżej" Apache, który trudni się właśnie nad transferowaniem buforów generowanych przez PHP.

0

http://www.jonasjohn.de/snippets/php/dl-speed-limit.htm
http://bytes.com/topic/php/answers/341922-using-php-limit-download-speed

Acz nie mam pewności czy aby czas przetwarzania skryptów nie będzie przekraczany przy większych plikach - musisz to sprawdzić.

0

Na czas to jest:

@set_time_limit(0);

Tutaj macie test skryptu z pierwszego linku:
http://to.o12.pl/work/4programmers/VT_142385/
Skrypt limit.php retransmituje archiwum ograniczając prędkość.
Plik test.zip jest wolny bez żadnych ograniczeń.

W skrypcie ustawiłem limit na 20kBps, widać że limit się trzyma.
Sposób jest całkiem zmyślny, na początku o tym nie pomyślałem ;)

Edit Ło żesz... Dopiero teraz się z tym obudziłem. Ciągle szukałem metody, na zablokowanie pobierania jednocześnie dwóch plików userowi - ten skrypt rozwiązuje sprawę!

0

Fajna sprawa, podane rozwiązania wystarczyłyby mi w zupełności... niestety SAFE MODE = ON... wiec 30sek i koniec pobierania z mojego serwera :/

Da się to jakos rozwiazac w inny sposob ? Moze byc nawet CGI, tylko zeby działało.

Btw. jeszcze kwestia zuzycia zasobów serwera, czy jak np. 10 osób uruchomi ściąganie pliku o wadze 20MB - przy czym każda z nich ściga plik w różnym czasie (ludzie mają przecież różne łącza), to czy nie obciąży to zbytnio serwera ? Przeciez jeden skrypt jest wykonywane przez np. 10min (dla wolnego łącza + safe_mode OFF)

//btw. na localhost dziala elegancko, faktycznie trzyma ustalony limit na zadanym poziomie

0

Na CGI się nie znam, mogę jedynie polecić to: http://4programmers.net/Forum/viewtopic.php?id=50074&start=45
Btw. no taki skrypt może zdeczka obciążyć serwer, ale lagi są głównie przez osoby ściągające coś masy GTA IV przez neta 512kBps czy jeszcze gorzej. Wtedy to i nie trzeba skryptów żeby 20 osób zatamowało ruch na słabszych serwerach wirtualnych.

0

Udostepniam pliki ktorych waga nie przegracza 30MB :D Wiec shell za 168zl/rok jest dla mnie zbedny ;p Nie mniej jednak dzieki za info =]

Moze jakis osobnik znający CGI poleci jaki skrypt/kod do obadania ?

2

Gotowa klasa obsługująca ograniczanie pasma downloadu jest do ściągnięcia tutaj: http://php.webtutor.pl/index.php/2011/03/22/limitowanie-predkosci-przesylu-plikow-w-php/

Oprócz możliwości stałego ograniczania prędkości, obsługuje też tzw burst mode, oraz daje wybór limitowania per wielkość pliku lub czas ściągania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1