Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Ograniczenie Transferu Pobierania
Forum PHP.pl > Forum > Przedszkole
k3nsei
Czy w PHP da się jakoś ograniczyć transfer zwykłym użytkownikom np. do 20 kb/s, a tym z premium pozwolić na download bez ograniczeń?
Pride
Mogę się mylić, ale moim zdaniem jest to nie możliwe do wykonania za pomocą PHP.
Tak myślę, że jest to raczej wykonywane za pomocą np. 2serwerów które działają jak routery czy coś w tym stylu.
Pitter
Moim zdaniem da się zrobić coś takiego.
Wszystko wyglądało by tak. (dotyczy download)
Każdy plik miałby w bazie danych ustaloną wielkość. aby pobrać trzeba się zalogować. Jeśli jesteś zalogowany przy kliknięciu w link wytkonujemy zapytanie do tabeli użytkowników. Wtedy edytuje się pole transfer i dodawana jest do niego wielkość pliku.
Potem oczywiście przy każdej próbie pobrania pliku jest sprawdzane czy użytkownik nie przekroczył transferu. Jeżeli przekroczył musi czekać ileś tam czasu. Jak odliczać czas od przekroczenia. Albo admin miałby pole w którym resetuje czas albo jakieś odliczanie. Mógłbym to zrobić ale to nie jest na jeden dzień:) Pozdrawiam Pitter. Jeżeli chciałbyś abym ci w tym pomógł moje gg 6333137
Pride
No ale jak chcesz ograniczyć transfer?
Możesz blokować możliwość pogrania pliku w ten sposób.
Pitter
Poprostu źle cię zrozumiałem. Też wydaje mi się że nie da się tego zrobić w php
SirZooro
Możesz napisać skrypt który będzie robił za proxy, tzn. on będzie wysyłał plik do klienta. W nim możesz na bieżąco liczyć jaki jest transfer do klienta (łącza są różne), i w zależności od potrzeb pomiędzy wysyłaniem kolejnych fragmentów pliku wstawiać odpowiednie wywołanie usleep. Poczytaj też o nagłówku HTTP Content-disposition: attachment.
k3nsei
THX za pomoc. Poczytam i może coś z tego będzie.
paziek
Najłatwiej będzie chyba to zrobić przy pomocy FTP, a nie PHP.
PHP ewentualnie do zakładania kont premium na FTP. W Apache (czy co tam masz) pewnie też da radę ograniczać transfery, ale IMHO FTP (File Transfer Protocol) jest do tego wręcz stworzony ;-)
k3nsei
Tylko trzeba mieć dostęp do tworzenia kont. A w nazwa.pl tego nie ma :/
paziek
ah, nazwa.pl .. to raczej zapomnij o tym ograniczaniu transferu tongue.gif
Pride
To już łatwiej ci będzie zrobić tak jak na rapidzie jest tongue.gif
Force
Może coś takiego. Na localhoście pobierało się z prędkością 19-23 KB/s. z cba.pl 25-35 KB/s.
UWAGA: nie zadziała jeżeli serwer cachuje stronę i wysyła dopiero po wygenerowaniu całości przez php. (na webd.pl nie działa)
  1. <?php
  2.  
  3. /*************************************************************
  4. * parametry:
  5. * $file: zawartosc tej zmiennej bedzie wyslana do usera
  6. * uwaga: jezeli chcesz w tym miescu dac adres pliku to podaj
  7. * jako parametr file_get_contents('adres_pliku.rar')
  8. * $mime - podaj mime pliku (string)
  9. * $premium - jezeli true idzie pełna predkoscia,
  10. * jezeli false ogranicza transfer (domyslnie false)
  11. *
  12. **************************************************************/
  13.  
  14.  
  15. function send_data($file, $mime, $premium = false)
  16. {
  17. $size = strlen($file);
  18. header('Content-type: '. $mime);
  19. header('Content-Length: '. $size);
  20. if($premium)
  21. {
  22. echo $file;
  23. }
  24. while($size > 0)
  25. {
  26. $part = mb_substr($file, null, 8192);
  27. $file = substr($file, 8192);
  28. echo $part;
  29. usleep(400000);
  30. $size = strlen($file);
  31. }
  32. }
  33.  
  34. // przykladowe uzycie
  35. $file = file_get_contents('obrazek.png');
  36. $mime = 'image/png';
  37. send_data($file, $mime);
  38.  
  39. // WCS gb puhwr wronar v xhejl cvreqbybar :)
  40.  
  41. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.