Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Limitowanie prędkości pobierania plików dynamicznych
seba22
post 17.02.2010, 15:05:48
Post #1





Grupa: Zarejestrowani
Postów: 293
Pomógł: 4
Dołączył: 28.01.2005

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


Witam,

Mam plik zapisany w zmiennej $zdjęcie.

Chciał bym wysłać go do przeglądarki z maksymalną prędkością 20KB/s.

Czy jest na to jakaś metoda ?

W wypadku plików statycznych, było obejście związane z fopen, wysyłanie chyba 4 kilobajtów w pętli a potem usleep na (x milisekund)... i dzięki temu mogliśmy dowolnie bawić się w limitowanie transferu...

Jak sytuacja miewa się w wypadku czegoś, co nazwijmy nie parlamentarnie mam w "stringu" i nie mogę wydawać parametru który mówi ile mam odczytać i ile wysłać... ?

Pozdrawiam


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Pilsener
post 17.02.2010, 23:20:41
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Jeśli chcesz odciążyć pamięć to wysyłasz po prostu plik po kawałku lub linia po linii, jeśli transfer to polecam:
http://pl.php.net/manual/pl/function.fread.php - w komentarzach kilka sposób limitowania transferu, było też na forum.
Go to the top of the page
+Quote Post
p-avel
post 9.04.2010, 09:31:08
Post #3





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

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


Sory, ale tu http://pl.php.net/manual/pl/function.fread.php nie ma nic konkretnego, szukając po necie też znajdziesz w większości przykład

  1. // local file that should be send to the client
  2. $local_file = 'test-file.zip';
  3. // filename that the user gets as default
  4. $download_file = 'your-download-name.zip';
  5.  
  6. // set the download rate limit (=> 20,5 kb/s)
  7. $download_rate = 20.5;
  8. if(file_exists($local_file) && is_file($local_file)) {
  9. // send headers
  10. header('Cache-control: private');
  11. header('Content-Type: application/octet-stream');
  12. header('Content-Length: '.filesize($local_file));
  13. header('Content-Disposition: filename='.$download_file);
  14.  
  15. // flush content
  16. flush();
  17. // open file stream
  18. $file = fopen($local_file, "r");
  19. while(!feof($file)) {
  20.  
  21. // send the current file part to the browser
  22. print fread($file, round($download_rate * 1024));
  23.  
  24. // flush the content to the browser
  25. flush();
  26.  


problem jest w tym że w zależności od prędkości łącza po stronie klienta, oraz to że nie znamy rozmiaru pliku który będzie przesłany powoduje to to że limit prędkości jest różny, trzeba by sprawdzać w jakiś sposób może prędkość łącza po stronie klienta i tym parametrem się sugerować

Pozdr
Go to the top of the page
+Quote Post
varez
post 9.04.2010, 09:32:44
Post #4





Grupa: Zarejestrowani
Postów: 275
Pomógł: 32
Dołączył: 17.06.2007

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


sa też rozszerzenia do apacha (zakladajac ze masz dostep do ich instalacji) z tego co wiem
Go to the top of the page
+Quote Post
p-avel
post 9.04.2010, 11:41:09
Post #5





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

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


nie no oczywiście chodzi o np. cband, ale cały bajer w tym z aby poziomu php to regulować

jakieś komercyjne rozwiązanie http://www.12scripts.com/scripts.php?scripts.id=4 ale nie ma nigdzie skryptu zeby przetestowac jak to działa

linki do tego co znalazłem:

Real Bandwidth Limiting with PHP
http://sixserv.org/2009/02/21/experimental...-http_download/

tu jest też spoko
Bandwidth Control with pure PHP
http://www.codewalkers.com/c/a/File-Manipu...-with-pure-PHP/

tyle że w każdym przypadku rozmiar pliku jest znany
Go to the top of the page
+Quote Post
erix
post 9.04.2010, 12:30:06
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Yhm, a w czym problem użyć funkcji buforowania wyjścia?

Do tego register_tick_function i sprawdzanie wielkości -> jeśli jest większe niż rozmiar bloczku -> pauza na sekundę.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
p-avel
post 21.04.2010, 12:38:46
Post #7





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

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


Cytat(erix @ 9.04.2010, 13:30:06 ) *
Yhm, a w czym problem użyć funkcji buforowania wyjścia?

Do tego register_tick_function i sprawdzanie wielkości -> jeśli jest większe niż rozmiar bloczku -> pauza na sekundę.

Buforowanie hm... ok, ale potrzebą jest aby limitowało cały ruch który dany użytkownik generuje, czyli jak pobiera dwa pliki to zadany transfer ma dzielić przez 2 itp., jak testowałem na jednym pliku to regulowałem prędkość bardziej przy pomocy usleep(); niż rozmiarem bloczku
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 Wersja Lo-Fi Aktualny czas: 25.06.2025 - 07:34